Browse Source

📦 build(deps): add @types/jsonwebtoken dependency

- 添加 @types/jsonwebtoken@^9.0.10 类型定义包以支持 JWT 类型检查

♻️ refactor(schema): improve email validation in user schema

- 移除 UserSchema、CreateUserDto 和 UpdateUserDto 中 email 字段的多余 string() 包装
- 优化邮箱验证逻辑,直接使用 z.email() 进行类型定义

🔧 chore(import): correct schema import paths

- 将 password.ts 和 roles/index.ts 中的 schema 导入路径从 .entity 改为 .schema
yourname 4 months ago
parent
commit
1c9209aa09

+ 1 - 0
package.json

@@ -85,6 +85,7 @@
     "@tailwindcss/vite": "^4.1.11",
     "@types/bcrypt": "^6.0.0",
     "@types/debug": "^4.1.12",
+    "@types/jsonwebtoken": "^9.0.10",
     "@types/node": "^24.0.10",
     "@types/react": "^19.1.8",
     "@types/react-dom": "^19.1.6",

+ 11 - 0
pnpm-lock.yaml

@@ -222,6 +222,9 @@ importers:
       '@types/debug':
         specifier: ^4.1.12
         version: 4.1.12
+      '@types/jsonwebtoken':
+        specifier: ^9.0.10
+        version: 9.0.10
       '@types/node':
         specifier: ^24.0.10
         version: 24.1.0
@@ -1579,6 +1582,9 @@ packages:
   '@types/estree@1.0.8':
     resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
 
+  '@types/jsonwebtoken@9.0.10':
+    resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==}
+
   '@types/ms@2.1.0':
     resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
 
@@ -4209,6 +4215,11 @@ snapshots:
 
   '@types/estree@1.0.8': {}
 
+  '@types/jsonwebtoken@9.0.10':
+    dependencies:
+      '@types/ms': 2.1.0
+      '@types/node': 24.1.0
+
   '@types/ms@2.1.0': {}
 
   '@types/node@24.1.0':

+ 1 - 1
src/server/api/auth/login/password.ts

@@ -5,7 +5,7 @@ import { z } from '@hono/zod-openapi'
 import { ErrorSchema } from '../../../utils/errorHandler'
 import { AppDataSource } from '../../../data-source'
 import { AuthContext } from '../../../types/context'
-import { UserSchema } from '@/server/modules/users/user.entity'
+import { UserSchema } from '@/server/modules/users/user.schema'
 
 const userService = new UserService(AppDataSource)
 const authService = new AuthService(userService)

+ 1 - 1
src/server/api/roles/index.ts

@@ -1,6 +1,6 @@
 import { createCrudRoutes } from '@/server/utils/generic-crud.routes';
 import { Role } from '@/server/modules/users/role.entity';
-import { RoleSchema, CreateRoleDto, UpdateRoleDto } from '@/server/modules/users/role.entity';
+import { RoleSchema, CreateRoleDto, UpdateRoleDto } from '@/server/modules/users/role.schema';
 import { authMiddleware } from '@/server/middleware/auth.middleware';
 import { checkPermission, permissionMiddleware } from '@/server/middleware/permission.middleware';
 import { OpenAPIHono } from '@hono/zod-openapi';

+ 3 - 3
src/server/modules/users/user.schema.ts

@@ -17,7 +17,7 @@ export const UserSchema = z.object({
     example: '13800138000',
     description: '手机号'
   }),
-  email: z.string().email('请输入正确的邮箱格式').max(255, '邮箱最多255个字符').nullable().openapi({
+  email: z.email('请输入正确的邮箱格式').max(255, '邮箱最多255个字符').nullable().openapi({
     example: 'user@example.com',
     description: '邮箱'
   }),
@@ -72,7 +72,7 @@ export const CreateUserDto = z.object({
     example: '13800138000',
     description: '手机号'
   }),
-  email: z.string().email('请输入正确的邮箱格式').max(255, '邮箱最多255个字符').nullable().optional().openapi({
+  email: z.email('请输入正确的邮箱格式').max(255, '邮箱最多255个字符').nullable().optional().openapi({
     example: 'user@example.com',
     description: '邮箱'
   }),
@@ -108,7 +108,7 @@ export const UpdateUserDto = z.object({
     example: '13800138000',
     description: '手机号'
   }),
-  email: z.string().email('请输入正确的邮箱格式').max(255, '邮箱最多255个字符').nullable().optional().openapi({
+  email: z.email('请输入正确的邮箱格式').max(255, '邮箱最多255个字符').nullable().optional().openapi({
     example: 'user@example.com',
     description: '邮箱'
   }),