cancel-order.mt.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
  2. import { authMiddleware } from '@d8d/auth-module-mt';
  3. import { AppDataSource, ErrorSchema } from '@d8d/shared-utils';
  4. import { AuthContext } from '@d8d/shared-types';
  5. import { OrderMtService } from '../../services';
  6. import { CancelOrderRequestDto, CancelOrderResponseDto } from '../../schemas/cancel-order.schema';
  7. const cancelOrderRoute = createRoute({
  8. method: 'post',
  9. path: '/cancel-order',
  10. middleware: [authMiddleware],
  11. request: {
  12. body: {
  13. content: {
  14. 'application/json': {
  15. schema: CancelOrderRequestDto
  16. }
  17. }
  18. }
  19. },
  20. responses: {
  21. 200: {
  22. description: '订单取消成功',
  23. content: {
  24. 'application/json': {
  25. schema: CancelOrderResponseDto
  26. }
  27. }
  28. },
  29. 400: {
  30. description: '请求参数错误',
  31. content: { 'application/json': { schema: ErrorSchema } }
  32. },
  33. 403: {
  34. description: '订单状态不允许取消',
  35. content: { 'application/json': { schema: ErrorSchema } }
  36. },
  37. 404: {
  38. description: '订单不存在',
  39. content: { 'application/json': { schema: ErrorSchema } }
  40. },
  41. 500: {
  42. description: '服务器内部错误',
  43. content: { 'application/json': { schema: ErrorSchema } }
  44. }
  45. }
  46. })
  47. const cancelOrderRoutes = new OpenAPIHono<AuthContext>()
  48. // 取消订单路由
  49. .openapi( cancelOrderRoute, async (c) => {
  50. const data = c.req.valid('json');
  51. const user = c.get('user');
  52. try {
  53. const orderService = new OrderMtService(AppDataSource);
  54. await orderService.cancelOrder(user.tenantId, data.orderId, data.reason, user.id);
  55. return c.json({
  56. success: true,
  57. message: '订单取消成功'
  58. }, 200);
  59. } catch (error) {
  60. console.error('取消订单失败:', error);
  61. // 根据错误类型返回不同的状态码
  62. if (error instanceof Error) {
  63. if (error.message === '订单不存在') {
  64. return c.json(
  65. { code: 404, message: error.message },
  66. 404
  67. );
  68. } else if (error.message === '当前订单状态不允许取消') {
  69. return c.json(
  70. { code: 403, message: error.message },
  71. 403
  72. );
  73. }
  74. }
  75. return c.json(
  76. { code: 500, message: error instanceof Error ? error.message : '取消订单失败' },
  77. 500
  78. );
  79. }
  80. }
  81. );
  82. export default cancelOrderRoutes;