3.4 KiB
3.4 KiB
Work Log - 日记管理按 quiz 表与逻辑重构(2026-04-23)
-
背景:按“用老工程表,参考老工程逻辑改造当前工程日记管理功能”要求,将
fquiz的/admin/diary从系统日志复用页切换为独立 Diary 模块。 -
本次改动(最小闭环):
-
后端模型与接口落地(对齐 quiz 口径):
api/app/models/diary.py- 新增主表
diary,字段:id/title/content/diary_date/mood/weather/archived/create_date/create_user/update_date/update_user
- 索引:
idx_diary_create_user/idx_diary_diary_date/idx_diary_mood/idx_diary_archived。
- 新增主表
api/app/schemas/diary.py- 新增
DiaryMood枚举:HAPPY/CALM/SAD/ANGRY/TIRED/EXCITED。 - 新增
DiaryQueryRequest/DiaryCreateRequest/DiaryUpdateRequest/DiarySummary/DiaryPageResponse。
- 新增
api/app/services/diary_service.py- 新增 create/search/get/update/delete/archive 逻辑。
- 查询逻辑对齐 quiz:按
create_user隔离数据,支持title/mood/diary_date_start/diary_date_end/archived过滤,排序diary_date DESC, create_date DESC。 - 归档逻辑对齐 quiz:
archive仅修改archived状态,保留原记录。
api/app/api/v1/diary.py- 新增接口:
POST /api/v1/diary/searchGET /api/v1/diary/get/{id}POST /api/v1/diary/createPUT /api/v1/diary/updateDELETE /api/v1/diary/delete/{id}POST /api/v1/diary/{id}/archive?archived=...
- 权限口径:
- 读:
menu.read | menu.manage - 写:
menu.manage
- 读:
- 新增接口:
- 路由与建表注册:
api/app/api/router.py挂载diary路由。api/app/models/__init__.py、api/app/core/database.py注册diary模型,确保create_all生效。
-
前端页面改造(替换 syslog 复用):
web/src/app/admin/diary/page.tsx- 改为独立 Diary 页面:
- 列表分页
- 条件查询(标题、心情、日期范围、归档状态)
- 新增 / 编辑 / 删除
- 归档 / 取消归档
- 详情弹窗
- API 调整到新后端接口
/api/v1/diary/*。
- 改为独立 Diary 页面:
web/src/types/auth.ts- 新增
DiaryMood/DiarySummary/DiaryListResponse类型。
- 新增
web/src/app/admin/page.tsx- 首页卡片文案从“上帝视角”调整为“日记管理”。
api/app/services/seed_service.py- 菜单
admin.diary名称更新为“日记管理”(路径保持/admin/diary)。
- 菜单
-
-
验证:
python3 -m py_compile api/app/models/diary.py api/app/schemas/diary.py api/app/services/diary_service.py api/app/api/v1/diary.py api/app/api/router.py api/app/models/__init__.py api/app/core/database.py api/app/services/seed_service.py-> 通过。python3 -m compileall api/app-> 通过。- 前端 ESLint 未完成(环境依赖缺失):
npm run lint提示eslint: not found;- 直接执行 eslint 后提示缺少
typescript依赖(Cannot find module 'typescript')。
-
风险与影响:
admin.diary保留menu.read/menu.manage权限体系(未引入独立diary.read/diary.manage),属于兼容方案;后续若需要更细权限边界,可单独拆分权限码。- 本次仅对齐了老工程 diary 主链路,不包含分组/tag 维度扩展(老工程该模块本身也未强依赖)。