diff --git a/docs/API.md b/docs/API.md index 0530d3d..73fe44c 100644 --- a/docs/API.md +++ b/docs/API.md @@ -523,6 +523,89 @@ POST /api/config/test --- +## 目标管理 API + +### GET /api/goals +获取所有目标 + +**响应**: +```json +[ + { + "id": 1, + "name": "掌握基本音阶", + "content": "...", + "created_at": "2026-04-23T10:00:00", + "updated_at": "2026-04-23T10:00:00" + } +] +``` + +### POST /api/goals +创建新目标 + +**请求体**: +```json +{ + "name": "目标名称", + "content": "目标内容(Markdown)" +} +``` + +### GET /api/goals/{id} +获取单个目标 + +### PUT /api/goals/{id} +更新目标 + +### DELETE /api/goals/{id} +删除目标 + +### GET /api/goals/{id}/children +获取目标的子目标 + +### GET /api/goals/{id}/parents +获取目标的父目标 + +### POST /api/goals/{id}/children +添加子目标关联(含循环检测) + +**请求体**: +```json +{ + "child_goal_id": 2 +} +``` + +### DELETE /api/goals/{id}/children/{child_id} +移除子目标关联 + +## 学员目标 API + +### GET /api/students/{id}/goals +获取学员的所有目标 + +### POST /api/students/{id}/goals +为学员分配目标 + +**请求体**: +```json +{ + "goal_id": 1, + "status": "未开始", + "mastery_level": 1, + "deadline": "2026-05-01" +} +``` + +### PUT /api/students/{id}/goals/{goal_id} +更新学员目标状态/掌握程度 + +### DELETE /api/students/{id}/goals/{goal_id} +移除学员的目标 + +--- + ## 权限说明 | 接口 | 管理员 | 普通用户 | diff --git a/docs/MODELS.md b/docs/MODELS.md index d50d8b8..b35096c 100644 --- a/docs/MODELS.md +++ b/docs/MODELS.md @@ -294,4 +294,48 @@ SELECT * FROM users; | 60分钟 | 中高级学员 | | 90分钟 | 高级学员 | | 120分钟 | 专业学员 | -| 150分钟以上 | 竞技水平 | \ No newline at end of file +| 150分钟以上 | 竞技水平 | + +--- + +## 目标管理模块 + +### Goal (目标表) + +| 字段 | 类型 | 说明 | +|------|------|------| +| id | Integer | 主键 | +| name | String(100) | 目标名称 | +| content | Text | 目标内容(Markdown) | +| created_at | DateTime | 创建时间 | +| updated_at | DateTime | 更新时间 | + +### GoalRelation (目标关联表) + +自关联多对多关系,用于表示目标之间的父子关系(DAG)。 + +| 字段 | 类型 | 说明 | +|------|------|------| +| parent_goal_id | Integer | 父目标ID,外键 | +| child_goal_id | Integer | 子目标ID,外键 | + +**关系类型**:自引用多对多(一个目标可以有多个子目标,也可以有多个父目标) + +**约束**:通过应用层循环检测防止形成循环 + +### StudentGoal (学员目标记录表) + +| 字段 | 类型 | 说明 | +|------|------|------| +| id | Integer | 主键 | +| student_id | Integer | 学员ID,外键 | +| goal_id | Integer | 目标ID,外键 | +| status | String(20) | 状态:未开始/进行中/已完成 | +| mastery_level | Integer | 掌握程度 1-5 | +| deadline | DateTime | 截止日期 | +| completed_at | DateTime | 完成时间 | +| created_at | DateTime | 创建时间 | + +**关系**: +- 一个学员可以分配多个目标 +- 一个目标可以分配给多个学员 \ No newline at end of file diff --git a/docs/STRUCTURE.md b/docs/STRUCTURE.md index a779ae3..e9e9fa1 100644 --- a/docs/STRUCTURE.md +++ b/docs/STRUCTURE.md @@ -21,7 +21,9 @@ │ │ ├── problems.py # 问题记录API │ │ ├── plans.py # 方案生成API │ │ ├── settings.py # 系统设置API -│ │ └── classes.py # 班级管理API(新增) +│ │ ├── classes.py # 班级管理API +│ │ ├── goals.py # 目标管理 API +│ │ └── student_goals.py # 学员目标 API │ │ │ ├── services/ # 业务逻辑 │ │ ├── plan_generator.py # 方案生成器 @@ -38,6 +40,7 @@ │ ├── setup.html # 初始设置页面(独立) │ ├── users.html # 用户管理页面(继承base) │ ├── classes.html # 班级管理页面(继承base) +│ ├── goals.html # 目标管理页面 │ ├── templates.html # 模板管理页面(继承base) │ ├── api_settings.html # API设置页面(继承base) │ └── wechat_card.html # 微信卡片模板(独立)