2
0
Просмотр исходного кода

✨ feat(submission): 添加提交记录与用户的关联查询功能

- 在提交记录实体中添加与用户的单向关联关系
- 移除冗余的nickname字段,通过关联关系获取用户信息
- 更新提交记录Schema,添加用户信息字段并排除密码敏感信息
- 在CRUD路由中配置relations参数,支持用户信息关联查询
yourname 6 месяцев назад
Родитель
Сommit
3a304cdd67

+ 1 - 0
src/server/api/submission-records/index.ts

@@ -10,6 +10,7 @@ const submissionRecordsRoutes = createCrudRoutes({
   getSchema: SubmissionRecordsSchema,
   listSchema: SubmissionRecordsSchema,
   searchFields: ['classroomNo', 'userId', 'code'],
+  relations: ['user'], // 添加用户关联查询
   middleware: [authMiddleware]
 });
 

+ 7 - 3
src/server/modules/submission/submission-records.entity.ts

@@ -1,4 +1,5 @@
-import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
+import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn } from 'typeorm';
+import { UserEntity } from '../users/user.entity';
 
 @Entity('submission_records')
 export class SubmissionRecords {
@@ -11,8 +12,11 @@ export class SubmissionRecords {
   @Column({ name: 'user_id', type: 'varchar', length: 255, nullable: true, comment: '用户id' })
   userId!: string | null;
 
-  @Column({ name: 'nickname', type: 'varchar', length: 255, nullable: true, comment: '昵称' })
-  nickname!: string | null;
+  // 单向关联定义
+  @ManyToOne(() => UserEntity, { nullable: true })
+  @JoinColumn({ name: 'user_id' })
+  user!: UserEntity | null;
+
 
   @Column({ name: 'score', type: 'decimal', precision: 10, scale: 2, nullable: true, comment: '成绩' })
   score!: number | null;

+ 3 - 11
src/server/modules/submission/submission-records.schema.ts

@@ -1,4 +1,5 @@
 import { z } from '@hono/zod-openapi';
+import { UserSchema } from '../users/user.schema';
 
 // 提交记录Schema定义
 export const SubmissionRecordsSchema = z.object({
@@ -14,9 +15,8 @@ export const SubmissionRecordsSchema = z.object({
     description: '用户ID',
     example: 'user123'
   }),
-  nickname: z.string().max(255, '昵称最多255个字符').nullable().openapi({
-    description: '昵称',
-    example: '张三'
+  user: UserSchema.omit({ password: true }).nullable().optional().openapi({
+    description: '用户信息'
   }),
   score: z.coerce.number<number>().multipleOf(0.01, '成绩最多保留两位小数').nullable().openapi({
     description: '成绩',
@@ -86,10 +86,6 @@ export const CreateSubmissionRecordsDto = z.object({
     description: '用户ID',
     example: 'user123'
   }),
-  nickname: z.string().max(255, '昵称最多255个字符').nullable().optional().openapi({
-    description: '昵称',
-    example: '张三'
-  }),
   score: z.coerce.number<number>().multipleOf(0.01, '成绩最多保留两位小数').nullable().optional().openapi({
     description: '成绩',
     example: 95.5
@@ -150,10 +146,6 @@ export const UpdateSubmissionRecordsDto = z.object({
     description: '用户ID',
     example: 'user123'
   }),
-  nickname: z.string().max(255, '昵称最多255个字符').nullable().optional().openapi({
-    description: '昵称',
-    example: '张三'
-  }),
   score: z.coerce.number<number>().multipleOf(0.01, '成绩最多保留两位小数').nullable().optional().openapi({
     description: '成绩',
     example: 95.5