/** * Model.ts * 后端数据模型定义文件 * 定义所有数据库实体模型,作为前后端开发的参考标准 */ // ============================================================ // 基础审计字段 (所有模型通用) // ============================================================ /** * 基础实体接口 * 所有业务模型都应继承此接口,包含数据追踪所需的基础字段 */ export interface BaseEntity { /** 全局唯一标识符 (GUID) */ id: string; /** 创建时间 */ createdAt: Date; /** 创建人ID */ createdBy: string; /** 最后修改时间 */ updatedAt: Date; /** 最后修改人ID */ updatedBy: string; /** 是否已软删除 */ isDeleted: boolean; } // ============================================================ // 1. 身份与权限模块 // ============================================================ /** * 用户实体 * 统一的用户账户,包含学生、老师、管理员等不同角色 */ export interface ApplicationUser extends BaseEntity { /** 真实姓名 */ realName: string; /** 学号/工号 */ studentId: string; /** 头像URL */ avatarUrl: string; /** 性别:Male | Female | Unknown */ gender: 'Male' | 'Female' | 'Unknown'; /** 当前所属学校ID(冗余字段,用于快速确定用户主要归属) */ currentSchoolId: string; /** 账号状态:Active | Disabled */ accountStatus: 'Active' | 'Disabled'; /** 邮箱(可选) */ email?: string; /** 手机号(可选) */ phone?: string; /** 个人简介 */ bio?: string; } // ============================================================ // 2. 组织架构模块 // ============================================================ /** * 学校实体 */ export interface School extends BaseEntity { /** 学校名称 */ name: string; /** 行政区划代码(省市区) */ regionCode: string; /** 详细地址 */ address: string; } /** * 年级实体 */ export interface Grade extends BaseEntity { /** 所属学校ID */ schoolId: string; /** 年级名称 */ name: string; /** 排序序号(用于前端显示顺序,如1=初一,2=初二) */ sortOrder: number; /** 入学年份(用于每年自动计算年级名称) */ enrollmentYear: number; } /** * 班级实体 */ export interface Class extends BaseEntity { /** 所属年级ID */ gradeId: string; /** 班级名称 */ name: string; /** 邀请码(6位唯一字符) */ inviteCode: string; /** 班主任ID */ headTeacherId: string; } /** * 班级成员实体 */ export interface ClassMember extends BaseEntity { /** 关联班级ID */ classId: string; /** 关联用户ID */ userId: string; /** 班内角色:Student | Teacher | HeadTeacher */ roleInClass: 'Student' | 'Teacher' | 'HeadTeacher'; /** 班级名片(用户在该班级显示的别名,如"张三-课代表") */ displayName?: string; } // ============================================================ // 3. 教材与知识图谱模块 // ============================================================ /** * 学科实体 */ export interface Subject extends BaseEntity { /** 学科名称 */ name: string; /** 学科代码(英文简写,如 MATH_JUNIOR) */ code: string; /** 图标(可选) */ icon?: string; } /** * 教材实体 */ export interface Textbook extends BaseEntity { /** 所属学科ID */ subjectId: string; /** 教材名称 */ name: string; /** 封面图URL */ coverUrl: string; /** 出版社 */ publisher: string; /** 版本年份 */ versionYear: string; } /** * 单元实体 */ export interface TextbookUnit extends BaseEntity { /** 所属教材ID */ textbookId: string; /** 单元名称 */ name: string; /** 排序序号 */ sortOrder: number; } /** * 课/小节实体 */ export interface TextbookLesson extends BaseEntity { /** 所属单元ID */ unitId: string; /** 课名称 */ name: string; /** 排序序号 */ sortOrder: number; } /** * 知识点实体 */ export interface KnowledgePoint extends BaseEntity { /** 挂载课节ID(说明这个知识点是在哪一课学的) */ lessonId: string; /** 父知识点ID(支持知识点的大点套小点结构,可选) */ parentKnowledgePointId?: string; /** 知识点名称 */ name: string; /** 难度系数(1-5星) */ difficulty: number; /** 描述/口诀 */ description?: string; } // ============================================================ // 4. 题库资源模块 // ============================================================ /** * 题目实体 */ export interface Question extends BaseEntity { /** 所属学科ID */ subjectId: string; /** 题干内容(HTML格式,包含文字、公式和图片链接) */ content: string; /** 选项配置(JSON结构,存储选项内容) */ optionsConfig?: string; /** 题目类型:SingleChoice | MultipleChoice | TrueFalse | FillBlank | Subjective */ questionType: 'SingleChoice' | 'MultipleChoice' | 'TrueFalse' | 'FillBlank' | 'Subjective'; /** 难度等级(1-5,默认为1) */ difficulty: number; /** 标准答案(文本或JSON格式) */ answer: string; /** 解析(HTML格式) */ explanation?: string; /** 来源(如"2023海淀期末") */ source?: string; } /** * 题目-知识点关联实体 */ export interface QuestionKnowledge extends BaseEntity { /** 关联题目ID */ questionId: string; /** 关联知识点ID */ knowledgePointId: string; /** 考察权重(0-100,表示该题目考察这个知识点的比重) */ weight: number; } // ============================================================ // 5. 试卷工程模块 // ============================================================ /** * 试卷实体 */ export interface Exam extends BaseEntity { /** 所属学科ID */ subjectId: string; /** 试卷标题 */ title: string; /** 总分 */ totalScore: number; /** 建议时长(分钟) */ suggestedDuration: number; /** 总题数 */ totalQuestions: number; /** 状态:Draft | Published */ status: 'Draft' | 'Published'; } /** * 试卷结构节点实体(可嵌套) * 支持树形结构,既可以是分组节点,也可以是题目节点 */ export interface ExamNode extends BaseEntity { /** 所属试卷ID */ examId: string; /** 父节点ID(用于分组,如"第一部分 选择题"是父节点) */ parentNodeId?: string; /** 节点类型:Group | Question */ nodeType: 'Group' | 'Question'; /** 关联题目ID(如果是题目节点) */ questionId?: string; /** 设定分数(这道题在这张卷子里算多少分) */ score: number; /** 排序序号(题号或分组顺序) */ sortOrder: number; /** 描述(如果是分组节点,可以写"阅读理解"等说明) */ description?: string; /** 子节点(前端使用,后端查询时填充) */ children?: ExamNode[]; } // ============================================================ // 6. 教学执行模块 // ============================================================ /** * 作业发布实体 */ export interface Assignment extends BaseEntity { /** 使用试卷ID */ examId: string; /** 发布人ID */ publisherId: string; /** 作业名称 */ title: string; /** 开始时间 */ startTime: Date; /** 截止时间 */ endTime: Date; /** 配置项(JSON格式,存储如"是否允许补交"、"考完是否立即出分"等开关) */ configOptions?: string; /** 应交人数 */ expectedSubmissions: number; /** 实交人数 */ actualSubmissions: number; } /** * 学生提交记录实体 */ export interface StudentSubmission extends BaseEntity { /** 所属作业ID */ assignmentId: string; /** 学生ID */ studentId: string; /** 当前状态:Pending | InProgress | Submitted | Graded */ status: 'Pending' | 'InProgress' | 'Submitted' | 'Graded'; /** 最终得分 */ finalScore?: number; /** 提交时间 */ submitTime?: Date; /** 耗时(秒) */ timeSpent?: number; } /** * 答题详情实体 */ export interface SubmissionDetail extends BaseEntity { /** 所属提交ID */ submissionId: string; /** 对应试卷节点ID(说明这是哪一道题的答案) */ examNodeId: string; /** 学生答案(文本或图片URL) */ studentAnswer?: string; /** 批改数据(JSON格式,存储老师在Canvas画板上的红笔轨迹、圈阅痕迹) */ gradingData?: string; /** 本题得分 */ score?: number; /** 判题结果:Correct | Incorrect | Partial */ judgement?: 'Correct' | 'Incorrect' | 'Partial'; /** 老师评语 */ teacherComment?: string; } // ============================================================ // 辅助类型定义 // ============================================================ /** * 性别枚举 */ export enum Gender { Male = 'Male', Female = 'Female', Unknown = 'Unknown' } /** * 账号状态枚举 */ export enum AccountStatus { Active = 'Active', Disabled = 'Disabled' } /** * 班级角色枚举 */ export enum ClassRole { Student = 'Student', Teacher = 'Teacher', HeadTeacher = 'HeadTeacher' } /** * 题目类型枚举 */ export enum QuestionType { SingleChoice = 'SingleChoice', MultipleChoice = 'MultipleChoice', TrueFalse = 'TrueFalse', FillBlank = 'FillBlank', Subjective = 'Subjective' } /** * 试卷状态枚举 */ export enum ExamStatus { Draft = 'Draft', Published = 'Published' } /** * 节点类型枚举 */ export enum NodeType { Group = 'Group', Question = 'Question' } /** * 提交状态枚举 */ export enum SubmissionStatus { Pending = 'Pending', InProgress = 'InProgress', Submitted = 'Submitted', Graded = 'Graded' } /** * 判题结果枚举 */ export enum JudgementResult { Correct = 'Correct', Incorrect = 'Incorrect', Partial = 'Partial' }