post.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
  2. import { UserService } from '../../modules/users/user.service';
  3. import { z } from 'zod';
  4. import { authMiddleware } from '../../middleware/auth.middleware';
  5. import { ErrorSchema } from '../../utils/errorHandler';
  6. import { AppDataSource } from '../../data-source';
  7. import { AuthContext } from '../../types/context';
  8. import { UserSchema } from '@/server/modules/users/user.entity';
  9. const userService = new UserService(AppDataSource);
  10. const CreateUserSchema = UserSchema.omit({
  11. id: true,
  12. createdAt: true,
  13. updatedAt: true,
  14. })
  15. const createUserRoute = createRoute({
  16. method: 'post',
  17. path: '/',
  18. middleware: authMiddleware,
  19. request: {
  20. body: {
  21. content: {
  22. 'application/json': {
  23. schema: CreateUserSchema
  24. }
  25. }
  26. }
  27. },
  28. responses: {
  29. 201: {
  30. description: '创建成功',
  31. content: {
  32. 'application/json': {
  33. schema: UserSchema
  34. }
  35. }
  36. },
  37. 400: {
  38. description: '输入数据无效',
  39. content: {
  40. 'application/json': {
  41. schema: ErrorSchema
  42. }
  43. }
  44. },
  45. 500: {
  46. description: '服务器错误',
  47. content: {
  48. 'application/json': {
  49. schema: ErrorSchema
  50. }
  51. }
  52. }
  53. }
  54. });
  55. const app = new OpenAPIHono<AuthContext>().openapi(createUserRoute, async (c) => {
  56. try {
  57. const data = c.req.valid('json');
  58. const user = await userService.createUser(data);
  59. return c.json(user, 201);
  60. } catch (error) {
  61. return c.json({ code: 500, message: '服务器错误' }, 500);
  62. }
  63. });
  64. export default app;