Files
Nexus_Edu/Model.ts
2025-11-28 19:23:19 +08:00

488 lines
10 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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'
}