create-order.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
  2. import { z } from '@hono/zod-openapi';
  3. import { CreateOrderRequestDto, CreateOrderResponseDto } from '@/server/modules/orders/schemas/create-order.schema';
  4. import { ErrorSchema } from '@/server/utils/errorHandler';
  5. import { AppDataSource } from '@/server/data-source';
  6. import { OrderService } from '@/server/modules/orders/order.service';
  7. import { AuthContext } from '@/server/types/context';
  8. import { authMiddleware } from '@/server/middleware/auth.middleware';
  9. const routeDef = createRoute({
  10. method: 'post',
  11. path: '/create',
  12. middleware: [authMiddleware],
  13. request: {
  14. body: {
  15. content: {
  16. 'application/json': {
  17. schema: CreateOrderRequestDto
  18. }
  19. }
  20. }
  21. },
  22. responses: {
  23. 200: {
  24. description: '订单创建成功',
  25. content: {
  26. 'application/json': {
  27. schema: CreateOrderResponseDto
  28. }
  29. }
  30. },
  31. 400: {
  32. description: '请求参数错误',
  33. content: {
  34. 'application/json': {
  35. schema: ErrorSchema
  36. }
  37. }
  38. },
  39. 500: {
  40. description: '服务器错误',
  41. content: {
  42. 'application/json': {
  43. schema: ErrorSchema
  44. }
  45. }
  46. }
  47. }
  48. });
  49. const app = new OpenAPIHono<AuthContext>().openapi(routeDef, async (c) => {
  50. try {
  51. const data = await c.req.json();
  52. const user = c.get('user');
  53. if (!user?.id) {
  54. return c.json({ code: 401, message: '用户未登录' }, 401);
  55. }
  56. const service = new OrderService(AppDataSource);
  57. const result = await service.createOrder(data, user.id);
  58. return c.json({
  59. success: true,
  60. orderId: result.orderId,
  61. orderNo: result.orderNo,
  62. amount: result.amount,
  63. payAmount: result.payAmount,
  64. message: '订单创建成功'
  65. }, 200);
  66. } catch (error) {
  67. const message = error instanceof Error ? error.message : '创建订单失败';
  68. return c.json({ code: 500, message }, 500);
  69. }
  70. });
  71. export default app;