chore: initial import to Nexus_Edu

This commit is contained in:
SpecialX
2025-11-28 19:23:19 +08:00
commit 38244630a7
153 changed files with 22541 additions and 0 deletions

487
Model.ts Normal file
View File

@@ -0,0 +1,487 @@
/**
* 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'
}