Compare commits

...

2 Commits

Author SHA1 Message Date
maoshen
d3325b562a docs: 添加软件需求规格说明书(动态维护) 2026-04-15 01:21:32 +00:00
maoshen
c7498229af docs: 添加功能清单和开发规范(防止丢失功能的措施) 2026-04-15 01:11:54 +00:00
3 changed files with 558 additions and 0 deletions

112
DEV_GUIDE.md Normal file
View File

@@ -0,0 +1,112 @@
# 日记系统 - 开发规范
## ⚠️ 血泪教训2026-04-15
**问题**:修改前端时丢失了已有的日历功能
**原因**
1. 没有先查看现有代码
2. 没有功能清单对照
3. 直接在 main 分支修改
4. 修改后没有验证所有功能
---
## 📋 修改代码前的必须步骤
### 1. 查看当前功能清单
```bash
# 查看 git 历史了解功能演进
git log --oneline -20
# 查看当前有哪些文件
git ls-files
# 查看最近的改动
git diff HEAD~5
```
### 2. 备份当前版本
```bash
# 创建备份分支
git branch backup-$(date +%Y%m%d-%H%M)
# 或者至少复制关键文件
cp frontend/index.html frontend/index.html.bak
```
### 3. 使用分支开发
```bash
# 创建功能分支
git checkout -b feature/xxx
# 开发完成后合并
git checkout main
git merge feature/xxx
```
### 4. 修改后验证清单
- [ ] 日历组件是否正常
- [ ] 统计面板数据是否正确
- [ ] Tab 切换是否正常
- [ ] API 接口是否可用
- [ ] 云服务器是否同步
---
## 📁 必须维护的文档
### 1. FEATURES.md - 功能清单
记录所有已实现的功能,每次修改前对照检查。
### 2. CHANGELOG.md - 变更日志
记录每次修改的内容,便于回滚。
### 3. API.md - 接口文档
记录所有 API 接口,避免删除后端接口。
---
## 🔄 标准开发流程
```
1. 查看功能清单 (FEATURES.md)
2. 创建备份分支
3. 创建功能分支开发
4. 本地测试所有功能
5. 同步到测试环境验证
6. 合并到 main
7. 部署到生产环境
8. 更新功能清单
```
---
## 🛑 禁止操作
- ❌ 直接覆盖 `index.html` 而不查看原有内容
- ❌ 在 main 分支直接开发新功能
- ❌ 修改后不验证就部署
- ❌ 删除文件前不确认是否还在使用
---
## ✅ 推荐操作
- ✅ 小步迭代,每次只改一个功能
- ✅ 使用 `git diff` 查看改动
- ✅ 修改前后截图对比
- ✅ 保持向后兼容
- ✅ 不确定时先问用户
---
_最后更新2026-04-15_
_创建原因:防止再次丢失已有功能_

142
FEATURES.md Normal file
View File

@@ -0,0 +1,142 @@
# 日记系统 - 功能清单
_最后更新2026-04-15_
---
## ✅ 已实现功能
### 后端 API
#### 日记模块 (`/api/entries/`)
- [x] `GET /` - 获取所有日记
- [x] `GET /{id}/` - 获取单条日记
- [x] `POST /` - 创建日记
- [x] `PUT /{id}/` - 更新日记
- [x] `DELETE /{id}/` - 删除日记
- [x] `GET /today/` - 获取今天的日记
- [x] `GET /recent/` - 获取最近 7 天的日记
- [x] `GET /stats/` - 获取统计信息
#### 经验总结模块 (`/api/experiences/`)
- [x] `GET /` - 获取所有经验
- [x] `GET /{id}/` - 获取单条经验
- [x] `POST /` - 创建经验
- [x] `PUT /{id}/` - 更新经验
- [x] `DELETE /{id}/` - 删除经验
- [x] `GET /recent/` - 获取最近 10 条经验
- [x] `GET /by_category/` - 按类别分组
#### 进度追踪模块 (`/api/progress/`)
- [x] `GET /` - 获取所有进度
- [x] `GET /{id}/` - 获取单条进度
- [x] `POST /` - 创建进度
- [x] `PUT /{id}/` - 更新进度
- [x] `DELETE /{id}/` - 删除进度
### 前端页面
#### 统计面板
- [x] 总日记数
- [x] 总任务数
- [x] 进行中任务
- [x] 已完成任务
- [x] 完成率
- [x] 经验总结数
#### 日历组件 ⭐
- [x] 月历视图
- [x] 有日记的日期标记 📝
- [x] 今天高亮显示
- [x] 点击日期查看详情
- [x] 上月/下月切换
- [x] 星期标题
#### Tab 切换
- [x] 工作任务 Tab
- [x] 日记 Tab
- [x] 经验总结 Tab
#### 日记展示
- [x] 日历视图(主视图)
- [x] 列表视图
- [x] 详情展示
- [x] 日期选择
#### 经验总结展示
- [x] 列表展示
- [x] 分类标签
- [x] 问题/解决方案格式
- [x] 经验教训高亮
### 数据模型
#### DiaryEntry
- [x] date - 日期
- [x] title - 标题
- [x] completed_tasks - 完成的任务
- [x] learned - 学到的东西
- [x] problems - 遇到的问题
- [x] reflections - 想法和反思
- [x] improvements - 进步点
- [x] plans - 明日计划
- [x] created_at - 创建时间
- [x] updated_at - 更新时间
#### Experience
- [x] title - 标题
- [x] category - 类别deployment/development/database/permission/network/other
- [x] problem - 问题描述
- [x] solution - 解决方案
- [x] lesson_learned - 经验教训
- [x] date - 日期
- [x] created_at - 创建时间
#### DailyProgress
- [x] entry - 关联日记
- [x] category - 类别
- [x] description - 描述
- [x] progress_percent - 进度百分比
- [x] created_at - 创建时间
### 部署
#### 本地部署
- [x] Gunicorn 服务(端口 8002
- [x] Nginx 反向代理(端口 8001
- [x] PostgreSQL 数据库
#### 云服务器部署
- [x] Gunicorn systemd 服务
- [x] Nginx 反向代理
- [x] SQLite 数据库
- [x] 访问地址http://cssc.datalibstar.com:8001/
---
## 🚧 计划功能
- [ ] 日记创建/编辑表单
- [ ] 经验总结创建表单
- [ ] 搜索功能
- [ ] 数据导出Markdown
- [ ] 用户认证
- [ ] 数据备份
---
## 📝 修改检查清单
每次修改代码前,对照此清单确保不丢失功能:
- [ ] 日历组件是否正常
- [ ] 统计面板数据是否正确
- [ ] Tab 切换是否正常
- [ ] 日记列表是否显示
- [ ] 经验总结是否显示
- [ ] API 接口是否可用
- [ ] 云服务器是否同步更新
---
_此文档必须在每次功能变更后更新_

304
REQUIREMENTS.md Normal file
View File

@@ -0,0 +1,304 @@
# 日记系统 - 软件需求规格说明书
_文档状态**进行中**
最后更新2026-04-15
版本v1.0_
---
## 📋 目录
1. [项目概述](#1-项目概述)
2. [功能需求](#2-功能需求)
3. [非功能需求](#3-非功能需求)
4. [技术架构](#4-技术架构)
5. [数据模型](#5-数据模型)
6. [开发计划](#6-开发计划)
7. [变更日志](#7-变更日志)
---
## 1. 项目概述
### 1.1 项目目标
构建一个个人日记系统,用于:
- 记录每日工作、学习和成长
- 追踪任务进度
- 积累经验教训
- 形成个人知识库
### 1.2 目标用户
- **主要用户**码神AI 助手)
- **次要用户**:北极星(人类用户)
### 1.3 核心价值
- **持续性**:每天记录,形成连续性
- **反思性**:定期回顾,提取经验
- **可追溯**:按日期快速查找历史
- **结构化**:分类整理,便于检索
---
## 2. 功能需求
### 2.1 日记管理 ✅
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-001 | 创建日记条目 | P0 | ✅ 已实现 |
| F-002 | 编辑日记内容 | P0 | ✅ 已实现 |
| F-003 | 删除日记 | P1 | ⏳ 待实现 |
| F-004 | 查看今日日记 | P0 | ✅ 已实现 |
| F-005 | 查看历史日记 | P0 | ✅ 已实现 |
| F-006 | 日历视图展示 | P0 | ✅ 已实现 |
| F-007 | 日记内容包含:完成任务、学到的东西、问题、反思、进步、计划 | P0 | ✅ 已实现 |
### 2.2 经验总结 ✅
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-010 | 创建经验总结 | P0 | ✅ 已实现 |
| F-011 | 经验分类(部署/开发/数据库/权限/网络/其他) | P0 | ✅ 已实现 |
| F-012 | 记录问题描述 | P0 | ✅ 已实现 |
| F-013 | 记录解决方案 | P0 | ✅ 已实现 |
| F-014 | 记录经验教训 | P1 | ✅ 已实现 |
| F-015 | 按类别查看经验 | P1 | ✅ 已实现 |
| F-016 | 经验总结搜索 | P2 | ⏳ 待实现 |
### 2.3 任务管理 ✅
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-020 | 创建任务 | P0 | ✅ 已实现 |
| F-021 | 任务关联到日记 | P0 | ✅ 已实现 |
| F-022 | 任务状态追踪(进行中/已完成) | P0 | ✅ 已实现 |
| F-023 | 任务完成率统计 | P0 | ✅ 已实现 |
| F-024 | 任务优先级 | P2 | ⏳ 待实现 |
### 2.4 统计面板 ✅
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-030 | 总日记数统计 | P0 | ✅ 已实现 |
| F-031 | 总任务数统计 | P0 | ✅ 已实现 |
| F-032 | 进行中任务数 | P0 | ✅ 已实现 |
| F-033 | 已完成任务数 | P0 | ✅ 已实现 |
| F-034 | 任务完成率 | P0 | ✅ 已实现 |
| F-035 | 经验总结数 | P0 | ✅ 已实现 |
### 2.5 搜索与筛选 ⏳
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-040 | 按日期范围筛选日记 | P1 | ⏳ 待实现 |
| F-041 | 按关键词搜索日记内容 | P1 | ⏳ 待实现 |
| F-042 | 按类别筛选经验总结 | P1 | ⏳ 待实现 |
| F-043 | 高级搜索(组合条件) | P2 | ⏳ 待实现 |
### 2.6 数据导出 ⏳
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-050 | 导出日记为 Markdown | P1 | ⏳ 待实现 |
| F-051 | 导出经验总结 | P1 | ⏳ 待实现 |
| F-052 | 全量数据备份 | P0 | ⏳ 待实现 |
| F-053 | 定期自动备份 | P1 | ⏳ 待实现 |
### 2.7 用户认证 ⏳
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| F-060 | 用户登录 | P2 | ⏳ 待实现 |
| F-061 | 权限控制 | P2 | ⏳ 待实现 |
| F-062 | 多用户支持 | P3 | ⏳ 待实现 |
---
## 3. 非功能需求
### 3.1 性能
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| N-001 | 页面加载时间 < 2 秒 | P0 | ✅ 已满足 |
| N-002 | API 响应时间 < 500ms | P0 | ✅ 已满足 |
| N-003 | 支持 1000+ 日记条目 | P1 | ✅ 已满足 |
### 3.2 可用性
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| N-010 | 7x24 小时可用 | P0 | ✅ 已满足 |
| N-011 | 数据持久化 | P0 | ✅ 已满足 |
| N-012 | 支持离线访问 | P2 | ⏳ 待实现 |
### 3.3 安全性
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| N-020 | 防止 SQL 注入 | P0 | ✅ 已满足 |
| N-021 | 防止 XSS 攻击 | P0 | ✅ 已满足 |
| N-022 | 敏感数据加密 | P1 | ⏳ 待实现 |
### 3.4 可维护性
| ID | 需求 | 优先级 | 状态 |
|----|------|--------|------|
| N-030 | 代码有文档注释 | P0 | ✅ 已满足 |
| N-031 | 有功能清单文档 | P0 | ✅ 已满足 |
| N-032 | 有开发规范文档 | P0 | ✅ 已满足 |
| N-033 | 有 Git 版本控制 | P0 | ✅ 已满足 |
---
## 4. 技术架构
### 4.1 技术栈
| 层级 | 技术 | 版本 | 说明 |
|------|------|------|------|
| 后端 | Django | 4.2+ | Web 框架 |
| API | Django REST Framework | 3.14+ | RESTful API |
| 前端 | 原生 HTML/JS | - | 轻量级实现 |
| 数据库 (本地) | PostgreSQL | 14+ | 内网数据库 |
| 数据库 (云) | SQLite | 3.x | 本地文件 |
| Web 服务器 | Nginx | 1.24+ | 反向代理 |
| 应用服务器 | Gunicorn | 25.x | WSGI 服务器 |
### 4.2 部署架构
```
用户 → Nginx(8001) → Gunicorn(8002) → Django → 数据库
```
### 4.3 目录结构
```
diary-system/
├── backend/ # Django 后端
│ ├── diary/ # 日记应用
│ │ ├── models.py # 数据模型
│ │ ├── views.py # API 视图
│ │ ├── serializers.py
│ │ └── urls.py
│ ├── diary_system/ # 项目配置
│ └── manage.py
├── frontend/ # 前端页面
│ └── index.html
├── FEATURES.md # 功能清单
├── DEV_GUIDE.md # 开发规范
├── REQUIREMENTS.md # 本文档
└── README.md
```
---
## 5. 数据模型
### 5.1 DiaryEntry日记条目
```python
class DiaryEntry(models.Model):
date = DateField(unique=True) # 日期
title = CharField(max_length=200) # 标题
completed_tasks = TextField() # 完成的任务
learned = TextField() # 学到的东西
problems = TextField() # 遇到的问题
reflections = TextField() # 想法和反思
improvements = TextField() # 进步点
plans = TextField() # 明日计划
created_at = DateTimeField() # 创建时间
updated_at = DateTimeField() # 更新时间
```
### 5.2 Experience经验总结
```python
class Experience(models.Model):
title = CharField(max_length=200) # 标题
category = CharField(choices=CATEGORY_CHOICES) # 类别
problem = TextField() # 问题描述
solution = TextField() # 解决方案
lesson_learned = TextField() # 经验教训
date = DateField() # 日期
created_at = DateTimeField() # 创建时间
```
### 5.3 DailyProgress任务进度
```python
class DailyProgress(models.Model):
entry = ForeignKey(DiaryEntry) # 关联日记
category = CharField(max_length=50) # 类别
description = TextField() # 描述
progress_percent = IntegerField() # 进度百分比
created_at = DateTimeField() # 创建时间
```
---
## 6. 开发计划
### 6.1 已完成 (v1.0) ✅
- [x] 日记 CRUD 功能
- [x] 经验总结功能
- [x] 任务管理功能
- [x] 统计面板
- [x] 日历组件
- [x] 云服务器部署
- [x] 文档完善(功能清单、开发规范)
### 6.2 进行中 (v1.1) 🚧
- [ ] 搜索功能
- [ ] 数据导出
- [ ] 自动备份
### 6.3 计划中 (v2.0) 📅
- [ ] 用户认证
- [ ] 多用户支持
- [ ] 数据可视化(图表)
- [ ] 移动端优化
### 6.4 未来规划 (v3.0) 🔮
- [ ] AI 辅助写日记
- [ ] 智能标签
- [ ] 情感分析
- [ ] 年度报告生成
---
## 7. 变更日志
### v1.0 (2026-04-15)
- ✅ 初始版本发布
- ✅ 日记管理功能
- ✅ 经验总结功能
- ✅ 任务管理功能
- ✅ 日历组件
- ✅ 统计面板
- ✅ 云服务器部署
### v0.2 (2026-04-14)
- ✅ 添加经验总结模块
- ✅ 添加分类管理
- ✅ 前端展示优化
### v0.1 (2026-04-14)
- ✅ 项目初始化
- ✅ 基础日记功能
- ✅ Django 后端搭建
---
## 📝 需求变更流程
1. **提出需求** - 在 GitHub Issues 或对话中提出
2. **评估优先级** - 确定 P0/P1/P2/P3
3. **更新文档** - 修改本需求文档
4. **开发实现** - 按开发规范执行
5. **测试验证** - 验证功能正常
6. **更新状态** - 标记为"已实现"
---
_本文档由码神维护,每次需求变更后必须更新并提交 git_