assessment-session.entity.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import {
  2. Entity,
  3. PrimaryGeneratedColumn,
  4. Column,
  5. CreateDateColumn,
  6. UpdateDateColumn,
  7. ManyToOne,
  8. JoinColumn,
  9. OneToMany,
  10. } from 'typeorm';
  11. import { User } from '../../user/user.entity';
  12. import { KnowledgeBase } from '../../knowledge-base/knowledge-base.entity';
  13. import { KnowledgeGroup } from '../../knowledge-group/knowledge-group.entity';
  14. import type { AssessmentQuestion } from './assessment-question.entity';
  15. import { AssessmentTemplate } from './assessment-template.entity';
  16. export enum AssessmentStatus {
  17. IN_PROGRESS = 'IN_PROGRESS',
  18. COMPLETED = 'COMPLETED',
  19. }
  20. @Entity('assessment_sessions')
  21. export class AssessmentSession {
  22. @PrimaryGeneratedColumn('uuid')
  23. id: string;
  24. @Column({ name: 'user_id' })
  25. userId: string;
  26. @ManyToOne(() => User)
  27. @JoinColumn({ name: 'user_id' })
  28. user: User;
  29. @Column({ name: 'tenant_id', nullable: true })
  30. tenantId: string;
  31. @Column({ name: 'knowledge_base_id', nullable: true })
  32. knowledgeBaseId: string | null;
  33. @ManyToOne(() => KnowledgeBase, { nullable: true })
  34. @JoinColumn({ name: 'knowledge_base_id' })
  35. knowledgeBase: KnowledgeBase;
  36. @Column({ name: 'knowledge_group_id', nullable: true })
  37. knowledgeGroupId: string | null;
  38. @ManyToOne(() => KnowledgeGroup, { nullable: true })
  39. @JoinColumn({ name: 'knowledge_group_id' })
  40. knowledgeGroup: KnowledgeGroup;
  41. @Column({ name: 'thread_id', nullable: true })
  42. threadId: string;
  43. @Column({
  44. type: 'varchar',
  45. enum: AssessmentStatus,
  46. default: AssessmentStatus.IN_PROGRESS,
  47. })
  48. status: AssessmentStatus;
  49. @Column({ type: 'float', name: 'final_score', nullable: true })
  50. finalScore: number;
  51. @Column({ type: 'text', name: 'final_report', nullable: true })
  52. finalReport: string;
  53. @Column({ type: 'simple-json', nullable: true })
  54. messages: any[];
  55. @Column({ type: 'simple-json', name: 'feedback_history', nullable: true })
  56. feedbackHistory: any[];
  57. @Column({ type: 'int', name: 'current_question_index', default: 0 })
  58. currentQuestionIndex: number;
  59. @Column({ type: 'int', name: 'follow_up_count', default: 0 })
  60. followUpCount: number;
  61. @Column({ type: 'simple-json', nullable: true })
  62. questions_json: any[];
  63. @Column({ type: 'varchar', length: 10, default: 'zh' })
  64. language: string;
  65. @Column({ name: 'template_id', nullable: true })
  66. templateId: string;
  67. @ManyToOne(() => AssessmentTemplate, { nullable: true })
  68. @JoinColumn({ name: 'template_id' })
  69. template: AssessmentTemplate;
  70. @Column({ type: 'simple-json', name: 'template_json', nullable: true })
  71. templateJson: any;
  72. @OneToMany(
  73. 'AssessmentQuestion',
  74. (question: AssessmentQuestion) => question.session,
  75. )
  76. questions: AssessmentQuestion[];
  77. @CreateDateColumn({ name: 'created_at' })
  78. createdAt: Date;
  79. @UpdateDateColumn({ name: 'updated_at' })
  80. updatedAt: Date;
  81. }