Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Week1完成报告.md
HaHafeng 66255368b7 feat(admin): Add user management and upgrade to module permission system
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
2026-01-16 13:42:10 +08:00

7.3 KiB
Raw Blame History

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表


📝 文档产出

  1. backend/ASL-API-测试报告.md
  2. docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Week1完成报告.md
  3. scripts/test-asl-api.ts (API测试脚本)
  4. scripts/create-asl-tables.ts (数据库创建脚本)
  5. 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: 冲突审核

  • 实现 reviewConflicts API
  • 批量审核功能
  • 审核历史记录

验收标准

Week 1 目标 (全部完成)

  • Prisma Schema设计完成
  • 4张数据库表创建
  • 后端目录结构创建
  • 10个API端点实现
  • API测试全部通过
  • 平台服务集成

质量标准

  • 代码符合TypeScript规范
  • 使用平台基础设施服务
  • Schema隔离架构
  • 云原生设计原则
  • 错误处理完善
  • 日志记录完整

🎉 总结

ASL模块Week 1开发任务全部完成提前4天完成原定5天的开发计划。

核心成果:

  • 完整的数据库设计和表结构
  • 10个RESTful API端点
  • LLM筛选服务框架
  • 100%测试通过率
  • 完善的代码文档

技术亮点:

  • Schema隔离架构
  • 双模型验证策略
  • 云原生设计
  • 模块化结构

为后续LLM筛选功能和前端开发奠定了坚实的基础🚀