chore: initial import to Nexus_Edu
This commit is contained in:
487
Model.ts
Normal file
487
Model.ts
Normal 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'
|
||||
}
|
||||
Reference in New Issue
Block a user