第二步
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
| Phase | 内容 | 状态 |
|
||||
|---|---|---|
|
||||
| 1 | 项目初始化 | ✅ 完成 |
|
||||
| 2 | 数据库和 Alembic | ⬜ |
|
||||
| 2 | 数据库和 Alembic | ✅ 完成 |
|
||||
| 3 | 用户注册登录 | ⬜ |
|
||||
| 4 | 知识库 CRUD | ⬜ |
|
||||
| 5 | 本地 StorageService | ✅ 完成(提前实现于 Phase 1) |
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 一、产品核心目标 ⬜(产品定位,随各 Phase 逐步实现)
|
||||
## 一、产品核心目标 🔄 产品定位,随各 Phase 逐步实现(Phase 1-2 已完成)
|
||||
|
||||
这个产品不是普通网盘。
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
生产环境:Ubuntu、Docker、Docker Compose。
|
||||
|
||||
## 四、第一版系统架构 ⬜(架构已定,实现随 Phase 推进)
|
||||
## 四、第一版系统架构 🔄 架构已定 + 数据库层 ✅ 实现随 Phase 推进
|
||||
|
||||
采用:
|
||||
|
||||
@@ -89,7 +89,7 @@ SQLite 保存元数据。文件系统保存:Word、PDF、Markdown。
|
||||
|
||||
禁止把原始 PDF、Word 二进制内容存进 SQLite。SQLite 只保存:用户信息、知识库信息、文档元数据、文件路径、Markdown 路径、文档状态、Token hash、时间、分类、描述、关键词、搜索相关数据。原始文件与 Markdown 均存服务器文件系统。
|
||||
|
||||
## 六、数据库访问必须抽象 ⬜ Phase 2(Phase 1 已建 db.py 引擎层)
|
||||
## 六、数据库访问必须抽象 ✅ 完成(Phase 2:ORM 模型 + Alembic 迁移已落地)
|
||||
|
||||
不能在业务代码中到处直接调用 sqlite3。必须使用 SQLAlchemy,并通过 Repository / Service 分层(UserRepository、KnowledgeBaseRepository、DocumentRepository)。业务逻辑不能依赖 SQLite 具体实现。数据库配置通过 `DATABASE_URL`(如 `sqlite:///./data/app.db`),未来可以切换 PostgreSQL 而尽量不修改业务层。
|
||||
|
||||
@@ -123,7 +123,7 @@ SQLite 保存元数据。文件系统保存:Word、PDF、Markdown。
|
||||
|
||||
User:id、username、email、password_hash、status、storage_quota、storage_used、created_at、updated_at。密码必须安全哈希,优先 Argon2id;禁止明文密码、MD5、SHA1。
|
||||
|
||||
## 十四、存储限制 🔄 部分完成(config.py 已有配额配置;Plan 模型 Phase 2 落地)
|
||||
## 十四、存储限制 ✅ 完成(config.py 配额配置 + Plan 模型已落地 Phase 2)
|
||||
|
||||
默认免费用户 100MB,单文件 20MB。不要硬编码,放到配置或 Plan 模型。第一版 Free Plan(100MB / 20MB-per-file),未来 Basic 1GB、Pro 5GB、Enterprise 自定义。第一版不实现支付。
|
||||
|
||||
@@ -192,7 +192,7 @@ data/
|
||||
|
||||
第一版不强制 OCR。如果 PDF 没有文本层,提示"该 PDF 可能是扫描件,当前版本暂不支持 OCR。"未来预留 OCRProcessor(PaddleOCR 等),第一版不加入 OCR。
|
||||
|
||||
## 二十六、文档状态 ⬜ Phase 2(状态模型)/ Phase 7(流转)
|
||||
## 二十六、文档状态 🔄 状态模型 ✅ 完成(Phase 2);流转 ⬜ Phase 7
|
||||
|
||||
PENDING、PROCESSING、READY、FAILED、DELETED。虽然第一版同步处理,但状态模型必须保留,未来异步任务可以直接使用。
|
||||
|
||||
@@ -248,11 +248,11 @@ Vue 3、TypeScript、Vite、Element Plus、Pinia。UI 要求:现代、简洁
|
||||
|
||||
第一版不需要 Redis,可以使用内存限流(如单 IP 每分钟一定次数),保护公共 AI URL。注意内存限流只适合单实例 MVP,代码中抽象 RateLimiter,未来可实现 RedisRateLimiter。(已实现 `core/rate_limit.py`:内存 TokenBucket + 配置化阈值。)
|
||||
|
||||
## 四十、访问日志 ⬜ Phase 2(模型)/ Phase 10(记录)
|
||||
## 四十、访问日志 🔄 模型 ✅ 完成(Phase 2);记录 ⬜ Phase 10
|
||||
|
||||
第一版可简单记录:knowledge_base_id、document_id、timestamp、user_agent、请求类型。不要默认长期保存完整 IP。后台可显示访问次数、最近访问时间。不要声称可以准确判断访问者是不是 AI,使用"外部访问"而不是"AI 访问"。
|
||||
|
||||
## 四十一、数据库模型 ⬜ Phase 2
|
||||
## 四十一、数据库模型 ✅ 完成(Phase 2:User/Plan/KnowledgeBase/DocumentCategory/Document/AccessLog 全部落地)
|
||||
|
||||
至少:User、Plan、KnowledgeBase、Document、DocumentCategory、AccessLog。
|
||||
|
||||
@@ -260,7 +260,7 @@ Document:id、knowledge_base_id、user_id、document_token_hash、original_fil
|
||||
|
||||
KnowledgeBase:id、user_id、name、description、secret_token_hash、enabled、created_at、updated_at。
|
||||
|
||||
## 四十二、数据库迁移 ⬜ Phase 2
|
||||
## 四十二、数据库迁移 ✅ 完成(Phase 2:Alembic 初始化 + 初始迁移 initial_schema 已应用)
|
||||
|
||||
使用 Alembic,即使 SQLite 也必须使用迁移。不要手工修改生产数据库。README 提供:初始化迁移、升级迁移、回滚迁移。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user