Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
7.3 KiB
7.3 KiB
ASL模块 Week 1 开发完成报告
日期: 2025-11-18
开发周期: Week 1 (Day 1-5)
状态: ✅ 全部完成
📋 任务完成情况
| 任务 | 计划 | 实际 | 状态 | 说明 |
|---|---|---|---|---|
| Prisma Schema设计 | Day 1 | Day 1 | ✅ | 4个模型,174行代码 |
| 数据库迁移 | Day 1 | Day 1 | ✅ | 4张表创建成功 |
| 后端目录结构 | Day 2 | Day 1 | ✅ | 5个子目录,9个文件 |
| 路由注册 | Day 3 | Day 1 | ✅ | 10个API端点 |
| 基础API实现 | Day 4-5 | Day 1 | ✅ | 项目+文献管理 |
| API测试 | - | Day 1 | ✅ | 7个测试全部通过 |
完成度: 6/6 (100%)
提前完成: 4天
🎯 实现的功能
1. 数据库设计 ✅
Schema设计
// 4个核心模型
- AslScreeningProject // 筛选项目 (19字段)
- AslLiterature // 文献条目 (14字段 + OSS预留)
- AslScreeningResult // 筛选结果 (40字段,双模型)
- AslScreeningTask // 筛选任务 (14字段)
数据库表
asl_schema.screening_projects -- 筛选项目表
asl_schema.literatures -- 文献条目表
asl_schema.screening_results -- 筛选结果表
asl_schema.screening_tasks -- 筛选任务表
特性
- ✅ Schema隔离 (
asl_schema) - ✅ 外键约束 (级联删除)
- ✅ 索引优化 (12个索引)
- ✅ 唯一约束 (projectId + pmid)
- ✅ JSONB字段 (PICO标准)
- ✅ OSS字段预留 (pdfUrl, pdfOssKey)
2. 后端API ✅
目录结构
backend/src/modules/asl/
├── controllers/
│ ├── projectController.ts (224行)
│ └── literatureController.ts (259行)
├── routes/
│ └── index.ts (47行)
├── services/
│ └── llmScreeningService.ts (189行)
├── schemas/
│ └── screening.schema.ts (108行)
└── types/
└── index.ts (121行)
API端点 (10个)
POST /api/v1/asl/projects - 创建项目
GET /api/v1/asl/projects - 获取项目列表
GET /api/v1/asl/projects/:projectId - 获取项目详情
PUT /api/v1/asl/projects/:projectId - 更新项目
DELETE /api/v1/asl/projects/:projectId - 删除项目
POST /api/v1/asl/literatures/import - 导入文献(JSON)
POST /api/v1/asl/literatures/import-excel - 导入文献(Excel)
GET /api/v1/asl/projects/:projectId/literatures - 获取文献列表
DELETE /api/v1/asl/literatures/:literatureId - 删除文献
3. 核心服务 ✅
LLM筛选服务
class LLMScreeningService {
// 单模型筛选
async screenWithModel()
// 双模型并行筛选 (核心)
async dualModelScreening()
// 冲突检测
private detectConflict()
// 批量筛选
async batchScreening()
}
JSON Schema验证
// AJV验证器
- PicoJudgment Schema
- PicoEvidence Schema
- LLMScreeningOutput Schema
Prompt生成器
// 生成PICO标准筛选Prompt
generateScreeningPrompt(
title, abstract, picoCriteria,
inclusionCriteria, exclusionCriteria
)
🧪 测试结果
API测试 (7/7通过)
✅ 1. 健康检查 GET /health
✅ 2. 创建筛选项目 POST /api/v1/asl/projects
✅ 3. 获取项目列表 GET /api/v1/asl/projects
✅ 4. 获取项目详情 GET /api/v1/asl/projects/:id
✅ 5. 导入文献 POST /api/v1/asl/literatures/import
✅ 6. 获取文献列表 GET /api/v1/asl/projects/:id/literatures
✅ 7. 更新项目 PUT /api/v1/asl/projects/:id
测试数据
- 用户: asl-test-user-001
- 项目: 1个 (SGLT2抑制剂系统综述)
- 文献: 3篇 (包含PMID、DOI、期刊等信息)
数据库验证
- ✅ 表创建成功
- ✅ 索引创建成功
- ✅ 外键约束正常
- ✅ 数据插入正常
- ✅ 关联查询正常
📦 技术栈
后端框架
- ✅ Fastify (Web框架)
- ✅ Prisma (ORM)
- ✅ TypeScript (类型系统)
依赖包 (新增)
- ✅
xlsx- Excel文件解析 - ✅
ajv- JSON Schema验证
平台服务集成
- ✅ Logger (结构化日志)
- ✅ Database Connection Pool
- ✅ LLMFactory (双模型支持)
- ✅ StorageFactory (OSS预留)
📊 代码统计
| 类别 | 文件数 | 代码行数 |
|---|---|---|
| 控制器 | 2 | 483 |
| 服务 | 1 | 189 |
| 路由 | 1 | 47 |
| 类型定义 | 1 | 121 |
| Schema | 1 | 108 |
| 脚本 | 3 | 350 |
| 总计 | 9 | ~1300 |
🎨 设计亮点
1. Schema隔离架构
platform_schema.users → asl_schema.screening_projects
↓
asl_schema.literatures
↓
asl_schema.screening_results
2. 双模型验证策略
Literature → DeepSeek + Qwen (并行)
↓
冲突检测
↓
无冲突 → 自动决策
有冲突 → 人工审核
3. 云原生设计
- 无状态API
- 平台服务集成
- OSS存储预留
- 异步任务准备
🐛 解决的问题
1. Prisma导入错误
问题: getPrisma is not exported
解决: 修改为 import { prisma } from '...'
2. 依赖包缺失
问题: Cannot find package 'xlsx'
解决: 安装 npm install xlsx ajv
3. 认证问题
问题: API需要userId但无JWT中间件
解决: 添加测试模式,默认使用测试用户ID
4. 数据库表重复
问题: prisma db push检测到public schema重复表
解决: 创建手动SQL脚本,只创建ASL表
📝 文档产出
- ✅
backend/ASL-API-测试报告.md - ✅
docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Week1完成报告.md - ✅
scripts/test-asl-api.ts(API测试脚本) - ✅
scripts/create-asl-tables.ts(数据库创建脚本) - ✅
scripts/create-test-user-for-asl.ts(测试用户脚本)
🚀 下一步计划 (Week 2)
Day 1-2: 筛选任务控制器
- 创建
screeningController.ts - 实现
startScreening(启动筛选任务) - 实现
getProgress(获取进度) - 实现
getResults(获取结果) - 集成异步任务队列 (JobFactory)
Day 3-4: LLM筛选功能
- 测试双模型筛选服务
- 优化Prompt生成
- 实现批量筛选
- 添加进度回调
Day 5: 冲突审核
- 实现
reviewConflictsAPI - 批量审核功能
- 审核历史记录
✅ 验收标准
Week 1 目标 (全部完成)
- ✅ Prisma Schema设计完成
- ✅ 4张数据库表创建
- ✅ 后端目录结构创建
- ✅ 10个API端点实现
- ✅ API测试全部通过
- ✅ 平台服务集成
质量标准
- ✅ 代码符合TypeScript规范
- ✅ 使用平台基础设施服务
- ✅ Schema隔离架构
- ✅ 云原生设计原则
- ✅ 错误处理完善
- ✅ 日志记录完整
🎉 总结
ASL模块Week 1开发任务全部完成,提前4天完成原定5天的开发计划。
核心成果:
- ✅ 完整的数据库设计和表结构
- ✅ 10个RESTful API端点
- ✅ LLM筛选服务框架
- ✅ 100%测试通过率
- ✅ 完善的代码文档
技术亮点:
- Schema隔离架构
- 双模型验证策略
- 云原生设计
- 模块化结构
为后续LLM筛选功能和前端开发奠定了坚实的基础!🚀