Files
AIclinicalresearch/docs/00-系统总体设计/前后端模块化架构设计-V2.md
HaHafeng e52020409c docs: complete documentation system (250+ files)
- System architecture and design documentation
- Business module docs (ASL/AIA/PKB/RVW/DC/SSA/ST)
- ASL module complete design (quality assurance, tech selection)
- Platform layer and common capabilities docs
- Development standards and API specifications
- Deployment and operations guides
- Project management and milestone tracking
- Architecture implementation reports
- Documentation templates and guides
2025-11-16 15:43:55 +08:00

46 KiB
Raw Blame History

前后端模块化架构设计 V2.0

版本: V2.2
创建日期: 2025-11-12
实施阶段: Week 22025-11-13开始
维护者: 开发团队
状态: Week 2 Day 6-9 全部完成(前端架构+模块注册+后端分层)


📋 文档说明

本文档是AI临床研究平台的模块化架构设计总纲,定义了:

  1. 前端架构:全新的 frontend-v2 模块化架构
  2. 后端架构基于Schema隔离的分层架构
  3. 前后端对应关系:模块化的组织方式
  4. 开发规范:统一的代码组织和命名规范
  5. 实施路线:渐进式的架构改造计划

适用对象:

  • 新加入的开发人员(快速了解系统架构)
  • AI助手理解代码组织结构
  • 技术决策者(架构演进参考)

🎯 架构演进历史

V1.0 阶段2025-10之前

  • 单体前端应用(所有功能耦合)
  • 后端代码平铺(无模块划分)
  • 数据库表全在public schema

V1.5 阶段2025-11-12完成

  • 数据库Schema隔离10个Schema
  • Prisma多Schema配置
  • 数据100%迁移成功
  • ⚠️ 前后端代码仍需模块化

V2.0 阶段2025-11-13~14完成

  • 前端模块化架构frontend-v2- Day 6-7完成
  • 模块注册机制(权限控制+错误边界+路由守卫)- Day 7完成
  • 后端增量演进架构legacy/common/modules- Day 8-9完成
  • 前后端模块对应
  • 支持模块独立开发和部署
  • 所有功能测试通过(包括批处理修复)

📸 当前架构真实状态2025-11-14

重要提示:本章节描述当前实际运行的架构状态
适用对象新开发人员、新AI助手、快速上手
更新频率:架构变更时立即更新


🎯 架构概览

【当前状态】增量演进架构(新旧并存)

Frontend-v2 (新)          Backend (混合)              Database (隔离)
    ↓                         ↓                           ↓
顶部导航 + 6模块          legacy/ + common/         10个独立 Schema
   占位                   + modules/asl               (3详细 + 7空)

核心策略:

  • 前端全新架构frontend-v2
  • 后端新旧并存legacy保持稳定新模块标准化
  • 数据库Schema隔离完成

📁 前端真实架构Frontend-v2

目录结构(实际存在)

frontend-v2/
├── src/
│   ├── framework/                      # 🏗️ 框架层(已实现)
│   │   ├── layout/                     
│   │   │   ├── MainLayout.tsx          # ✅ 主布局
│   │   │   ├── TopNavigation.tsx       # ✅ 顶部导航
│   │   │   └── UserMenu.tsx            # ✅ 用户菜单
│   │   │
│   │   ├── modules/                    
│   │   │   ├── moduleRegistry.ts       # ✅ 模块注册中心
│   │   │   ├── ErrorBoundary.tsx       # ✅ 错误边界
│   │   │   └── ModuleErrorFallback.tsx # ✅ 错误回退UI
│   │   │
│   │   ├── router/                     
│   │   │   ├── RouteGuard.tsx          # ✅ 路由守卫
│   │   │   └── PermissionDenied.tsx    # ✅ 权限拒绝页
│   │   │
│   │   └── permission/                 
│   │       ├── PermissionContext.tsx   # ✅ 权限上下文
│   │       ├── usePermission.ts        # ✅ 权限Hook
│   │       └── types.ts                # ✅ 权限类型
│   │
│   ├── modules/                        # 📦 业务模块(占位)
│   │   ├── asl/                        # 🚧 Week 3开发
│   │   │   └── index.tsx               # ✅ 占位页面
│   │   ├── aia/                        # 📋 占位
│   │   ├── pkb/                        # 📋 占位
│   │   ├── dc/                         # 📋 占位
│   │   ├── ssa/                        # 📋 占位
│   │   └── st/                         # 📋 占位
│   │
│   ├── pages/                          
│   │   └── Home.tsx                    # ✅ 首页
│   │
│   └── App.tsx                         # ✅ 应用入口
│
├── package.json                        # ✅ React 19
└── vite.config.ts                      # ✅ Vite配置

当前运行状态:

  • 访问地址:http://localhost:3000
  • 顶部导航显示6个模块
  • 权限控制工作正常mock premium用户
  • 路由守卫生效
  • 错误边界正常捕获

🗄️ 后端真实架构Backend

目录结构(实际存在) 关键

backend/
├── src/
│   ├── legacy/                         # 🔸 现有业务代码(稳定运行)
│   │   ├── routes/                     # 7个路由文件
│   │   │   ├── agents.ts               # AIA: 智能体路由
│   │   │   ├── conversations.ts        # AIA: 对话路由
│   │   │   ├── chatRoutes.ts           # AIA: 通用对话路由
│   │   │   ├── projects.ts             # AIA: 项目路由
│   │   │   ├── knowledgeBases.ts       # PKB: 知识库路由
│   │   │   ├── batchRoutes.ts          # PKB: 批处理路由
│   │   │   └── reviewRoutes.ts         # RVW: 稿件审查路由
│   │   │
│   │   ├── controllers/                # 8个控制器
│   │   │   ├── agentController.ts
│   │   │   ├── conversationController.ts
│   │   │   ├── chatController.ts
│   │   │   ├── projectController.ts
│   │   │   ├── knowledgeBaseController.ts
│   │   │   ├── documentController.ts
│   │   │   ├── batchController.ts
│   │   │   └── reviewController.ts
│   │   │
│   │   ├── services/                   # 8个服务
│   │   │   ├── agentService.ts
│   │   │   ├── conversationService.ts
│   │   │   ├── projectService.ts
│   │   │   ├── knowledgeBaseService.ts
│   │   │   ├── documentService.ts
│   │   │   ├── batchService.ts
│   │   │   ├── reviewService.ts
│   │   │   └── tokenService.ts
│   │   │
│   │   └── templates/
│   │       └── clinicalResearch.ts     # 批处理模板
│   │
│   ├── common/                         # 🔧 通用能力层(共享)
│   │   ├── llm/                        
│   │   │   └── adapters/               # LLM适配器
│   │   │       ├── DeepSeekAdapter.ts  # ✅ DeepSeek-V3
│   │   │       ├── QwenAdapter.ts      # ✅ Qwen3-72B + Qwen-Long
│   │   │       ├── LLMFactory.ts       # ✅ 工厂类
│   │   │       └── types.ts            # ✅ LLM类型定义
│   │   │
│   │   ├── rag/                        # RAG能力
│   │   │   ├── DifyClient.ts           # ✅ Dify客户端
│   │   │   └── types.ts                # ✅ RAG类型
│   │   │
│   │   ├── document/                   # 文档处理
│   │   │   └── ExtractionClient.ts     # ✅ 文档提取客户端
│   │   │
│   │   ├── middleware/                 
│   │   │   └── validateProject.ts      # ✅ 项目验证中间件
│   │   │
│   │   └── utils/                      
│   │       └── jsonParser.ts           # ✅ JSON解析工具
│   │
│   ├── modules/                        # 🌟 新架构模块(标准化)
│   │   └── asl/                        # ⭐ AI智能文献占位Week 3开发
│   │       └── (空目录,等待开发)
│   │
│   ├── config/                         # ⚙️ 配置层
│   │   ├── database.ts                 # ✅ 数据库配置
│   │   └── env.ts                      # ✅ 环境变量
│   │
│   ├── scripts/                        # 🛠️ 工具脚本
│   │   ├── create-mock-user.ts
│   │   └── test-dify-client.ts
│   │
│   └── index.ts                        # ✅ 主入口(统一注册)
│
├── config/                             # 外部配置文件
│   └── agents.yaml                     # ✅ 智能体配置348行
│
├── prompts/                            # Prompt模板
│   ├── topic_evaluation_system.txt
│   ├── review_editorial_system.txt
│   └── review_methodology_system.txt
│
├── prisma/
│   ├── schema.prisma                   # ✅ 10个Schema定义
│   └── migrations/                     # ✅ 4个迁移文件
│
├── package.json                        # ✅ Fastify + Prisma
└── .env                                # ✅ 环境变量

当前运行状态:

主入口index.ts实际代码

// ============================================
// 【旧架构】Legacy 模块 - 保持不变
// ============================================
import { projectRoutes } from './legacy/routes/projects.js';
import { agentRoutes } from './legacy/routes/agents.js';
import { conversationRoutes } from './legacy/routes/conversations.js';
import knowledgeBaseRoutes from './legacy/routes/knowledgeBases.js';
import { chatRoutes } from './legacy/routes/chatRoutes.js';
import { batchRoutes } from './legacy/routes/batchRoutes.js';
import reviewRoutes from './legacy/routes/reviewRoutes.js';

// 注册 Legacy 模块路由
await fastify.register(projectRoutes, { prefix: '/api/v1/aia' });
await fastify.register(agentRoutes, { prefix: '/api/v1/aia' });
await fastify.register(conversationRoutes, { prefix: '/api/v1/aia' });
await fastify.register(chatRoutes, { prefix: '/api/v1/aia' });
await fastify.register(knowledgeBaseRoutes, { prefix: '/api/v1/pkb' });
await fastify.register(batchRoutes, { prefix: '/api/v1/pkb' });
await fastify.register(reviewRoutes, { prefix: '/api/v1/rvw' });

🗃️ 数据库真实架构PostgreSQL 15

Schema 结构(实际存在)

-- ==================== 平台层 Schema ====================
platform_schema (平台基础表)
  └── users                    #  用户表(已实现)

-- ==================== 详细 Schema数据已迁移====================
aia_schema (AI智能问答)
  ├── projects                 #  项目表
  ├── agents                   #  智能体配置表
  ├── conversations            #  对话表
  └── messages                 #  消息表

pkb_schema (个人知识库)
  ├── knowledge_bases          #  知识库表
  ├── documents                #  文档表
  ├── batch_tasks              #  批处理任务表
  ├── batch_results            #  批处理结果表
  └── task_templates           #  任务模板表

rvw_schema (稿件审查)
  ├── review_tasks             #  审查任务表
  └── (public schema中)      # ⚠️ 历史原因

-- ==================== 占位 Schema数据结构未定义====================
asl_schema (AI智能文献)         # 🚧 Week 3开发
  └── (空,等待定义)

common_schema (通用工具)         # 📋 占位
dc_schema (数据采集)            # 📋 占位
ssa_schema (统计分析)           # 📋 占位
st_schema (研究工具)            # 📋 占位
admin_schema (运营管理)         # 📋 占位

Prisma Schema 配置:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  schemas  = [
    "platform_schema",  # ✅ 平台
    "aia_schema",       # ✅ 智能问答
    "pkb_schema",       # ✅ 知识库
    "asl_schema",       # 🚧 智能文献Week 3
    "common_schema",    # 📋 占位
    "dc_schema",        # 📋 占位
    "rvw_schema",       # 📋 占位
    "admin_schema",     # 📋 占位
    "ssa_schema",       # 📋 占位
    "st_schema",        # 📋 占位
    "public"            # ✅ 历史遗留
  ]
}

🔌 API 真实路由(当前可用)

AIA 模块AI智能问答

基础路径:/api/v1/aia

项目管理:
  ✅ GET    /projects              # 获取项目列表
  ✅ POST   /projects              # 创建项目
  ✅ GET    /projects/:id          # 获取项目详情
  ✅ PUT    /projects/:id          # 更新项目
  ✅ DELETE /projects/:id          # 删除项目

智能体管理:
  ✅ GET    /agents                # 获取智能体列表
  ✅ GET    /agents/enabled        # 获取启用的智能体
  ✅ GET    /agents/:id            # 获取智能体详情

对话管理:
  ✅ POST   /conversations         # 创建对话
  ✅ GET    /conversations         # 获取对话列表
  ✅ GET    /conversations/:id     # 获取对话详情
  ✅ POST   /conversations/:id/messages/stream  # 流式发送消息
  ✅ POST   /conversations/:id/messages         # 非流式发送消息
  ✅ DELETE /conversations/:id     # 删除对话

通用对话:
  ✅ POST   /chat/stream           # 通用流式对话
  ✅ POST   /chat                  # 通用非流式对话

PKB 模块(个人知识库)

基础路径:/api/v1/pkb

知识库管理:
  ✅ GET    /knowledge-bases       # 获取知识库列表
  ✅ POST   /knowledge-bases       # 创建知识库
  ✅ GET    /knowledge-bases/:id   # 获取知识库详情
  ✅ PUT    /knowledge-bases/:id   # 更新知识库
  ✅ DELETE /knowledge-bases/:id   # 删除知识库

文档管理:
  ✅ POST   /knowledge-bases/:id/documents       # 上传文档
  ✅ GET    /knowledge-bases/:id/documents       # 获取文档列表
  ✅ DELETE /knowledge-bases/:kbId/documents/:docId  # 删除文档

批处理:
  ✅ POST   /batch/execute                       # 执行批处理任务
  ✅ GET    /batch/tasks/:taskId                 # 获取任务状态
  ✅ GET    /batch/tasks/:taskId/results         # 获取任务结果
  ✅ POST   /batch/tasks/:taskId/retry-failed    # 重试失败项

RVW 模块(稿件审查)

基础路径:/api/v1/rvw

稿件审查:
  ✅ POST   /review/upload         # 上传稿件并开始审查
  ✅ GET    /review/tasks/:taskId  # 查询任务状态
  ✅ GET    /review/tasks/:taskId/report  # 获取完整报告
  ✅ GET    /review/tasks          # 获取任务列表
  ✅ DELETE /review/tasks/:taskId  # 删除任务

系统端点

✅ GET  /health                    # 健康检查
✅ GET  /api/v1                    # API信息

📊 技术栈真实配置

前端Frontend-v2

{
  "react": "^19.0.0",
  "react-dom": "^19.0.0",
  "react-router-dom": "^6.x",
  "typescript": "^5.x",
  "vite": "^6.x",
  "antd": "^5.x",
  "tailwindcss": "^3.x"
}

后端Backend

{
  "fastify": "^4.x",
  "typescript": "^5.x",
  "prisma": "^6.17.0",
  "@prisma/client": "^6.17.0",
  "tsx": "^4.x",
  "axios": "^1.x",
  "js-yaml": "^4.x",
  "p-queue": "^8.x"
}

数据库

PostgreSQL: 15.x
Schema数量: 10个3详细 + 7占位
迁移文件: 4个

LLM 集成CloseAI

✅ DeepSeek-V3      (主力,性价比)
✅ Qwen3-72B        (备用,中文理解)
✅ Qwen-Long        (超长上下文1M)
✅ GPT-4o           (可选,高质量)

🔄 前后端模块对应关系(当前)

前端模块 后端位置 数据库Schema API路由 状态
frontend-v2/modules/asl/ backend/modules/asl/ asl_schema /api/v1/asl/* 🚧 Week 3开发
frontend-v2/modules/aia/ backend/legacy/routes/agents.ts等 aia_schema /api/v1/aia/* 运行中
frontend-v2/modules/pkb/ backend/legacy/routes/knowledgeBases.ts等 pkb_schema /api/v1/pkb/* 运行中
frontend-v2/modules/rvw/ backend/legacy/routes/reviewRoutes.ts public + rvw_schema /api/v1/rvw/* 运行中
frontend-v2/modules/dc/ (未实现) dc_schema /api/v1/dc/* 📋 占位
frontend-v2/modules/ssa/ (未实现) ssa_schema /api/v1/ssa/* 📋 占位
frontend-v2/modules/st/ (未实现) st_schema /api/v1/st/* 📋 占位

📋 功能测试清单(已验证)

功能 测试项 状态 备注
智能问答 创建项目
智能问答 对话模式 流式+非流式
智能问答 知识库模式 RAG检索
智能问答 批处理模式 修复rawOutput问题后正常
知识库 创建知识库
知识库 上传文档 PDF/Word/TXT/MD
知识库 文档管理 列表/删除
稿件审查 上传稿件
稿件审查 审查报告
前端 顶部导航 6个模块
前端 权限控制 mock premium
前端 路由守卫
前端 错误边界

🎯 新模块开发指南以ASL为例

开发流程Week 3

第1步数据库设计
  ├─ 设计 asl_schema 表结构
  ├─ 在 Prisma schema 中定义模型
  └─ 运行迁移创建表

第2步后端开发
  ├─ 在 backend/src/modules/asl/ 下开发
  ├─ 创建 routes/(路由)
  ├─ 创建 controllers/(控制器)
  ├─ 创建 services/(服务)
  └─ 注册路由到 index.ts

第3步前端开发
  ├─ 在 frontend-v2/src/modules/asl/ 下开发
  ├─ 创建 pages/(页面)
  ├─ 创建 components/(组件)
  ├─ 创建 api/API调用
  └─ 更新 index.tsx模块注册

第4步联调测试
  ├─ 前后端联调
  └─ 功能验收

📚 相关文档索引

快速上手:

  • 本文档 - 架构总纲 + 当前状态
  • docs/09-架构实施/后端架构增量演进方案.md - 后端详细说明450行

任务记录:

  • docs/08-项目管理/下一阶段行动计划-V2.2-完整版.md - 项目计划
  • docs/09-架构实施/前端模块注册机制实施报告.md - 前端任务17
  • docs/08-项目管理/2025-11-14-任务19完成总结.md - 后端任务19

技术规范:

  • docs/09-架构实施/编码规范-UTF8最佳实践.md - 编码规范
  • .editorconfig - 编辑器配置
  • .gitattributes - Git配置

本章节更新日期: 2025-11-14
下次更新时机: ASL模块开发完成后


🏗️ 整体架构设计

系统架构图

┌─────────────────────────────────────────────────────────────────┐
│                         AI临床研究平台                            │
└─────────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┴─────────────────────┐
        │                                           │
   ┌────▼─────┐                              ┌─────▼────┐
   │  前端层   │                              │  后端层   │
   │frontend-v2│◄────────── HTTP API ────────►│ backend  │
   └──────────┘                              └──────────┘
        │                                           │
        │ 模块化                                    │ 模块化 + Schema隔离
        │                                           │
   ┌────┴────────────────────────┐         ┌───────┴──────────────────┐
   │                             │         │                          │
   │  ┌─────┐  ┌─────┐  ┌─────┐ │         │  ┌─────────────────────┐ │
   │  │ ASL │  │ AIA │  │ PKB │ │         │  │ PostgreSQL          │ │
   │  │模块 │  │模块 │  │模块 │ │         │  │  ┌─────────────────┐│ │
   │  └─────┘  └─────┘  └─────┘ │         │  │  │ platform_schema ││ │
   │  ┌─────┐  ┌─────┐          │         │  │  │ aia_schema      ││ │
   │  │ RVW │  │ DC  │  ...     │         │  │  │ pkb_schema      ││ │
   │  │模块 │  │模块 │          │         │  │  │ asl_schema      ││ │
   │  └─────┘  └─────┘          │         │  │  │ ...             ││ │
   │                             │         │  │  └─────────────────┘│ │
   └─────────────────────────────┘         │  └─────────────────────┘ │
                                           └──────────────────────────┘

📁 前端架构设计frontend-v2

设计原则

  1. 彻底的模块化 - 每个业务模块完全独立
  2. 框架与业务分离 - 框架层提供基础能力,业务模块专注功能
  3. 渐进式开发 - 新架构与旧代码并存,逐步替换
  4. 独立部署支持 - 模块可独立打包和部署

目录结构

frontend-v2/
├── src/
│   ├── framework/                      # 🏗️ 框架层(平台级基础设施)
│   │   │
│   │   ├── layout/                     # 布局系统
│   │   │   ├── MainLayout.tsx          # 主布局(顶部导航+内容区)
│   │   │   ├── TopNavigation.tsx       # 顶部导航栏
│   │   │   ├── UserMenu.tsx            # 用户菜单
│   │   │   └── ModuleContainer.tsx     # 模块容器
│   │   │
│   │   ├── modules/                    # 模块管理系统
│   │   │   ├── moduleRegistry.ts       # 模块注册中心
│   │   │   ├── ModuleLoader.tsx        # 动态模块加载器
│   │   │   ├── types.ts                # 模块接口定义
│   │   │   └── config.ts               # 模块配置
│   │   │
│   │   ├── router/                     # 路由系统
│   │   │   ├── AppRouter.tsx           # 应用路由配置
│   │   │   ├── RouteGuard.tsx          # 路由守卫
│   │   │   └── routes.ts               # 路由定义
│   │   │
│   │   ├── permission/                 # 权限控制(预留)
│   │   │   ├── PermissionProvider.tsx  # 权限上下文
│   │   │   ├── usePermission.ts        # 权限Hook
│   │   │   └── config.ts               # 权限配置
│   │   │
│   │   └── config/                     # 全局配置
│   │       ├── env.ts                  # 环境变量
│   │       ├── api.ts                  # API配置
│   │       └── theme.ts                # 主题配置
│   │
│   ├── modules/                        # 📦 业务模块(完全独立)
│   │   │
│   │   ├── asl/                        # ⭐ AI智能文献模块优先开发
│   │   │   ├── index.tsx               # 模块入口导出ModuleDefinition
│   │   │   ├── routes.tsx              # 模块路由配置
│   │   │   │
│   │   │   ├── layouts/                # 模块布局
│   │   │   │   └── ASLLayout.tsx       # ASL左侧导航布局
│   │   │   │
│   │   │   ├── pages/                  # 模块页面
│   │   │   │   ├── ProjectList.tsx            # 项目列表
│   │   │   │   ├── ProjectCreate.tsx          # 创建项目
│   │   │   │   ├── TitleScreening/            # 标题摘要初筛
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── ScreeningWorkbench.tsx
│   │   │   │   │   └── ResultsView.tsx
│   │   │   │   ├── FullTextScreening/         # 全文复筛
│   │   │   │   │   └── ...
│   │   │   │   ├── DataExtraction/            # 数据提取
│   │   │   │   │   └── ...
│   │   │   │   └── Analysis/                  # 综合分析
│   │   │   │       └── ...
│   │   │   │
│   │   │   ├── components/             # 模块组件(仅本模块使用)
│   │   │   │   ├── LiteratureCard.tsx
│   │   │   │   ├── ScreeningPanel.tsx
│   │   │   │   ├── LLMSelector.tsx
│   │   │   │   └── ...
│   │   │   │
│   │   │   ├── api/                    # 模块API对接后端
│   │   │   │   ├── projectApi.ts
│   │   │   │   ├── screeningApi.ts
│   │   │   │   ├── extractionApi.ts
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   ├── hooks/                  # 模块Hooks
│   │   │   │   ├── useProject.ts
│   │   │   │   ├── useScreening.ts
│   │   │   │   └── useLLMScreening.ts
│   │   │   │
│   │   │   ├── store/                  # 模块状态管理
│   │   │   │   ├── projectStore.ts
│   │   │   │   ├── screeningStore.ts
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   ├── types/                  # 模块类型定义
│   │   │   │   ├── project.ts
│   │   │   │   ├── literature.ts
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   └── utils/                  # 模块工具函数
│   │   │       ├── fileParser.ts
│   │   │       └── exportHelper.ts
│   │   │
│   │   ├── aia/                        # 📋 AI智能问答模块后续重写
│   │   │   ├── index.tsx
│   │   │   └── Placeholder.tsx         # 临时占位页面
│   │   │
│   │   ├── pkb/                        # 📋 个人知识库模块(后续重写)
│   │   │   ├── index.tsx
│   │   │   └── Placeholder.tsx
│   │   │
│   │   ├── rvw/                        # 📋 审稿系统模块(后续重写)
│   │   │   ├── index.tsx
│   │   │   └── Placeholder.tsx
│   │   │
│   │   └── dc/                         # 📋 数据清洗模块(占位)
│   │       ├── index.tsx
│   │       └── Placeholder.tsx
│   │
│   ├── shared/                         # 🔧 共享资源(跨模块使用)
│   │   ├── components/                 # 通用UI组件
│   │   │   ├── Button/
│   │   │   ├── Table/
│   │   │   ├── Modal/
│   │   │   └── ...
│   │   │
│   │   ├── hooks/                      # 通用Hooks
│   │   │   ├── useDebounce.ts
│   │   │   ├── useAsync.ts
│   │   │   └── ...
│   │   │
│   │   ├── utils/                      # 工具函数
│   │   │   ├── date.ts
│   │   │   ├── format.ts
│   │   │   ├── validation.ts
│   │   │   └── ...
│   │   │
│   │   └── api/                        # API客户端
│   │       ├── client.ts               # Axios实例
│   │       ├── request.ts              # 请求拦截器
│   │       └── types.ts                # API类型
│   │
│   ├── App.tsx                         # 应用根组件
│   ├── main.tsx                        # 应用入口
│   └── vite-env.d.ts
│
├── public/                             # 静态资源
├── package.json
├── vite.config.ts                      # Vite配置
├── tsconfig.json                       # TypeScript配置
├── tailwind.config.js                  # Tailwind配置
└── README.md

模块定义接口

// framework/modules/types.ts

/**
 * 模块定义接口
 * 每个业务模块必须实现这个接口
 */
export interface ModuleDefinition {
  /** 模块唯一标识 */
  id: string
  
  /** 模块名称(显示在导航栏) */
  name: string
  
  /** 模块路由前缀 */
  path: string
  
  /** 模块图标(可选) */
  icon?: ReactNode
  
  /** 模块入口组件(懒加载) */
  component: LazyExoticComponent<ComponentType<any>>
  
  /** 模块路由配置 */
  routes?: RouteObject[]
  
  /** 模块是否有左侧导航 */
  hasSideNav?: boolean
  
  /** 左侧导航配置(如果有) */
  sideNavConfig?: SideNavItem[]
  
  /** 权限要求(可选) */
  requiredVersion?: UserVersion
  
  /** 是否为占位模块 */
  placeholder?: boolean
  
  /** 是否支持独立部署 */
  standalone?: boolean
}

/**
 * 左侧导航项
 */
export interface SideNavItem {
  id: string
  label: string
  path: string
  icon?: ReactNode
  children?: SideNavItem[]
}

模块注册示例

// modules/asl/index.tsx

import { lazy } from 'react'
import { ModuleDefinition } from '@/framework/modules/types'
import routes from './routes'
import { sideNavConfig } from './config'

const ASLModule: ModuleDefinition = {
  id: 'asl',
  name: 'AI智能文献',
  path: '/literature',
  icon: <FileTextOutlined />,
  component: lazy(() => import('./layouts/ASLLayout')),
  routes,
  hasSideNav: true,
  sideNavConfig,
  requiredVersion: 'advanced',
}

export default ASLModule

模块路由示例

// modules/asl/routes.tsx

import { lazy } from 'react'
import { RouteObject } from 'react-router-dom'

const routes: RouteObject[] = [
  {
    path: '',
    element: lazy(() => import('./pages/ProjectList')),
  },
  {
    path: 'project/:projectId',
    children: [
      {
        path: 'title-screening',
        element: lazy(() => import('./pages/TitleScreening')),
      },
      {
        path: 'fulltext-screening',
        element: lazy(() => import('./pages/FullTextScreening')),
      },
      {
        path: 'extraction',
        element: lazy(() => import('./pages/DataExtraction')),
      },
      {
        path: 'analysis',
        element: lazy(() => import('./pages/Analysis')),
      },
    ],
  },
]

export default routes

📁 后端架构设计backend

设计原则

  1. Schema隔离 - 数据库层面的模块隔离(已完成)
  2. 代码分层 - platform/common/modules三层架构
  3. 模块独立 - 每个模块的API和逻辑独立
  4. 保持兼容 - 轻度重构,不破坏现有功能

目录结构

backend/
├── src/
│   ├── platform/                       # 🏛️ 平台层(基础设施)
│   │   ├── auth/                       # 认证授权
│   │   │   ├── authController.ts
│   │   │   ├── authService.ts
│   │   │   ├── authMiddleware.ts
│   │   │   └── routes.ts
│   │   │
│   │   └── users/                      # 用户管理
│   │       ├── userController.ts
│   │       ├── userService.ts
│   │       └── routes.ts
│   │
│   ├── common/                         # 🔧 通用层(共享能力)
│   │   ├── middleware/                 # 中间件
│   │   │   ├── errorHandler.ts
│   │   │   ├── logger.ts
│   │   │   ├── validation.ts
│   │   │   └── cors.ts
│   │   │
│   │   ├── utils/                      # 工具函数
│   │   │   ├── date.ts
│   │   │   ├── encryption.ts
│   │   │   └── format.ts
│   │   │
│   │   ├── errors/                     # 错误处理
│   │   │   ├── AppError.ts
│   │   │   ├── errorTypes.ts
│   │   │   └── errorHandler.ts
│   │   │
│   │   └── types/                      # 通用类型
│   │       ├── request.ts
│   │       ├── response.ts
│   │       └── common.ts
│   │
│   ├── modules/                        # 📦 业务模块
│   │   │
│   │   ├── aia/                        # AI智能问答模块
│   │   │   ├── controllers/            # 控制器
│   │   │   │   ├── projectController.ts
│   │   │   │   ├── agentController.ts
│   │   │   │   ├── conversationController.ts
│   │   │   │   └── chatController.ts
│   │   │   │
│   │   │   ├── services/               # 业务逻辑
│   │   │   │   ├── projectService.ts
│   │   │   │   ├── conversationService.ts
│   │   │   │   └── llmService.ts
│   │   │   │
│   │   │   ├── routes/                 # 路由配置
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   ├── types/                  # 模块类型
│   │   │   │   ├── project.ts
│   │   │   │   └── conversation.ts
│   │   │   │
│   │   │   └── utils/                  # 模块工具
│   │   │       └── prompt.ts
│   │   │
│   │   ├── pkb/                        # 个人知识库模块
│   │   │   ├── controllers/
│   │   │   │   ├── knowledgeBaseController.ts
│   │   │   │   ├── documentController.ts
│   │   │   │   └── batchController.ts
│   │   │   │
│   │   │   ├── services/
│   │   │   │   ├── kbService.ts
│   │   │   │   ├── documentService.ts
│   │   │   │   ├── batchService.ts
│   │   │   │   └── difyService.ts
│   │   │   │
│   │   │   ├── routes/
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   └── types/
│   │   │       ├── knowledgeBase.ts
│   │   │       └── document.ts
│   │   │
│   │   ├── rvw/                        # 审稿系统模块
│   │   │   ├── controllers/
│   │   │   │   └── reviewController.ts
│   │   │   │
│   │   │   ├── services/
│   │   │   │   ├── reviewService.ts
│   │   │   │   └── extractionService.ts
│   │   │   │
│   │   │   ├── routes/
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   └── types/
│   │   │       └── review.ts
│   │   │
│   │   └── asl/                        # ⭐ AI智能文献模块Week 3新建
│   │       ├── controllers/
│   │       │   ├── projectController.ts
│   │       │   ├── literatureController.ts
│   │       │   ├── screeningController.ts
│   │       │   └── extractionController.ts
│   │       │
│   │       ├── services/
│   │       │   ├── projectService.ts
│   │       │   ├── literatureService.ts
│   │       │   ├── screeningService.ts
│   │       │   ├── llmScreeningService.ts
│   │       │   └── extractionService.ts
│   │       │
│   │       ├── routes/
│   │       │   └── index.ts
│   │       │
│   │       ├── types/
│   │       │   ├── project.ts
│   │       │   ├── literature.ts
│   │       │   └── screening.ts
│   │       │
│   │       └── utils/
│   │           ├── fileParser.ts
│   │           ├── llmPrompts.ts
│   │           └── exportHelper.ts
│   │
│   ├── config/                         # 配置文件(现有)
│   │   ├── database.ts
│   │   ├── env.ts
│   │   └── ...
│   │
│   └── index.ts                        # 应用入口
│
├── prisma/
│   └── schema.prisma                   # Prisma Schema已配置10个Schema
│
├── package.json
└── tsconfig.json

模块路由注册

// src/index.ts

import { platformRoutes } from './platform/routes'
import { aiaRoutes } from './modules/aia/routes'
import { pkbRoutes } from './modules/pkb/routes'
import { rvwRoutes } from './modules/rvw/routes'
import { aslRoutes } from './modules/asl/routes'

// 注册平台路由
fastify.register(platformRoutes, { prefix: '/api/v1/platform' })

// 注册业务模块路由
fastify.register(aiaRoutes, { prefix: '/api/v1/aia' })
fastify.register(pkbRoutes, { prefix: '/api/v1/pkb' })
fastify.register(rvwRoutes, { prefix: '/api/v1/rvw' })
fastify.register(aslRoutes, { prefix: '/api/v1/asl' })

🔗 前后端对应关系

模块映射表

前端模块 后端模块 数据库Schema 路由前缀 开发状态
frontend-v2/src/modules/asl/ backend/src/modules/asl/ asl_schema /api/v1/asl/* 🚧 Week 3开发
frontend-v2/src/modules/aia/ backend/src/modules/aia/ aia_schema /api/v1/aia/* 📋 后续重写
frontend-v2/src/modules/pkb/ backend/src/modules/pkb/ pkb_schema /api/v1/pkb/* 📋 后续重写
frontend-v2/src/modules/rvw/ backend/src/modules/rvw/ public.review_tasks /api/v1/rvw/* 📋 后续重写
frontend-v2/src/modules/dc/ backend/src/modules/dc/ dc_schema /api/v1/dc/* 📋 占位

API调用示例

// 前端frontend-v2/src/modules/asl/api/projectApi.ts
import { apiClient } from '@/shared/api/client'

export const aslProjectApi = {
  // 创建项目
  create: (data: CreateProjectDTO) => 
    apiClient.post('/api/v1/asl/projects', data),
  
  // 获取项目列表
  list: () => 
    apiClient.get('/api/v1/asl/projects'),
  
  // 获取项目详情
  getById: (id: string) => 
    apiClient.get(`/api/v1/asl/projects/${id}`),
}

// 后端backend/src/modules/asl/routes/index.ts
import { FastifyInstance } from 'fastify'
import { aslProjectController } from '../controllers/projectController'

export async function aslRoutes(fastify: FastifyInstance) {
  fastify.post('/projects', aslProjectController.create)
  fastify.get('/projects', aslProjectController.list)
  fastify.get('/projects/:id', aslProjectController.getById)
}

📐 开发规范

命名规范

前端

文件命名:

  • 组件PascalCaseProjectList.tsx
  • HookscamelCase + use前缀useProject.ts
  • 工具函数camelCaseformatDate.ts
  • 类型定义PascalCaseProject.ts

代码命名:

  • 组件PascalCaseProjectList
  • 函数camelCasefetchProjects
  • 常量UPPER_SNAKE_CASEAPI_BASE_URL
  • 接口PascalCase + I前缀IProject
  • 类型PascalCaseProject

后端

文件命名:

  • ControllercamelCase + Controller后缀projectController.ts
  • ServicecamelCase + Service后缀projectService.ts
  • Routesindex.tsroutes.ts
  • TypescamelCaseproject.ts

代码命名:

  • PascalCaseProjectService
  • 函数camelCasecreateProject
  • 常量UPPER_SNAKE_CASEMAX_FILE_SIZE
  • 接口PascalCaseProjectDTO

模块开发规范

1. 新模块开发流程

第一步:数据库设计
├─ 在 docs/03-业务模块/[模块名]/02-技术设计/01-数据库设计.md
├─ 设计表结构
├─ 在 Prisma schema 中定义模型
└─ 运行迁移

第二步:后端开发
├─ 创建 backend/src/modules/[模块名]/
├─ 编写 controllers/
├─ 编写 services/
├─ 编写 routes/
└─ 测试 API

第三步:前端开发
├─ 创建 frontend-v2/src/modules/[模块名]/
├─ 定义模块接口index.tsx
├─ 编写 pages/
├─ 编写 components/
├─ 编写 api/
├─ 编写 hooks/
└─ 测试功能

第四步:集成测试
├─ 端到端测试
└─ 性能测试

2. 模块独立性原则

DO

  • 模块内的组件只在模块内使用
  • 模块有自己的状态管理
  • 模块有自己的API调用
  • 模块有自己的类型定义
  • 模块可以独立运行和部署

DON'T

  • 不要在模块间直接import组件
  • 不要在模块间共享状态
  • 不要在模块间直接调用API
  • 共享的逻辑放在 shared/ 目录

3. API设计规范

RESTful风格

GET    /api/v1/[module]/resources       # 列表
GET    /api/v1/[module]/resources/:id   # 详情
POST   /api/v1/[module]/resources       # 创建
PUT    /api/v1/[module]/resources/:id   # 更新
DELETE /api/v1/[module]/resources/:id   # 删除

响应格式:

// 成功响应
{
  success: true,
  data: any,
  message?: string
}

// 错误响应
{
  success: false,
  error: {
    code: string,
    message: string,
    details?: any
  }
}

🚀 实施计划

Week 2架构改造2025-11-13 至 2025-11-17

Day 611-13前端架构基础 4-6小时

上午:项目创建和框架层

  • 创建 frontend-v2 项目Vite + React + TS
  • 安装依赖Antd、Router、Zustand、React Query
  • 配置 Tailwind CSS
  • 创建目录结构framework/modules/shared
  • 实现 TopNavigation.tsx
  • 实现 MainLayout.tsx
  • 定义模块接口ModuleDefinition

下午:模块占位

  • 为5个模块创建目录
  • 创建 Placeholder.tsx 组件
  • 配置基本路由
  • 测试导航切换

交付物:

  • 可运行的 frontend-v2 项目
  • 顶部导航正常工作
  • 5个模块占位页面

Day 711-14模块注册机制 6-8小时

上午:注册系统

  • 实现 moduleRegistry.ts
  • 实现 ModuleLoader.tsx
  • 实现动态路由加载
  • 实现懒加载机制

下午:测试和文档

  • 测试模块注册
  • 测试路由切换
  • 编写开发文档
  • 更新 README

交付物:

  • 完整的模块注册系统
  • 动态路由加载
  • 开发文档

Day 8-911-15 至 11-16后端代码分层 1-2天

Day 8 上午:创建目录结构

  • 创建 platform/ 目录
  • 创建 common/ 目录
  • 创建 modules/ 目录

Day 8 下午:迁移 AIA 模块

  • 创建 modules/aia/ 结构
  • 迁移 projectController.ts
  • 迁移 conversationController.ts
  • 更新路由注册

Day 9 上午:迁移 PKB 和 RVW

  • 迁移 PKB 模块代码
  • 迁移 RVW 模块代码
  • 更新所有 import 路径

Day 9 下午:测试和文档

  • 测试所有 API
  • 更新 API 文档
  • 编写迁移说明

交付物:

  • 完成后端代码分层
  • 所有API正常工作
  • 更新文档

Day 1011-17Week 2 验收 4小时

  • 前端架构验收
  • 后端分层验收
  • 集成测试
  • 编写 Week 2 总结报告
  • 规划 Week 3 ASL 任务

Week 3-4ASL模块开发在新架构下

在全新的 frontend-v2 和分层后的 backend 中开发 ASL 模块

详见:下一阶段行动计划-V2.2-完整版.md


📝 旧代码处理

frontend/ 目录

状态: ⏸️ 保留,不再开发

处理方式:

  1. 添加 README-ARCHIVED.md 说明文件
  2. 在根目录 package.json 中区分启动命令
  3. 保留3-6个月作为参考和应急备份
  4. 新架构稳定后再删除

参考价值:

  • UI交互设计
  • 某些组件实现
  • API调用逻辑
  • 业务流程

启动命令

{
  "scripts": {
    "dev:frontend-old": "cd frontend && npm run dev",
    "dev:frontend-new": "cd frontend-v2 && npm run dev",
    "dev:frontend": "npm run dev:frontend-new",
    "dev:backend": "cd backend && npm run dev",
    "dev": "concurrently \"npm run dev:backend\" \"npm run dev:frontend\""
  }
}

🎯 成功标准

Week 2 验收标准

前端:

  • frontend-v2 项目可运行
  • 顶部导航正常工作
  • 模块注册系统完整
  • 5个模块占位页面
  • 路由切换正常
  • 完整的开发文档

后端:

  • 代码分层完成platform/common/modules
  • 所有现有API正常工作
  • 路由前缀统一(/api/v1/[module]/*
  • import路径全部更新
  • API文档更新

文档:

  • 本架构设计文档
  • 前端开发规范文档
  • 后端开发规范文档
  • Week 2总结报告

📚 相关文档

架构设计

数据库设计

实施报告

项目管理


🔄 版本历史

版本 日期 变更内容 维护者
V2.0 2025-11-12 创建本文档,定义前后端模块化架构 AI助手
V2.1 2025-11-13 完成权限系统、错误边界、路由守卫实施 AI助手

文档维护者: AI助手 + 开发团队
最后更新: 2025-11-13
文档状态: 已完成Week 2 Day 7实施完成

🎉 这是系统架构演进的重要里程碑!