Files
012-kaopeilian/docs/规划/全链路联调/old/联调结果汇总报告.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

16 KiB
Raw Permalink Blame History

考培练系统全链路联调结果汇总报告(重写版)

执行时间

2025-09-22

联调环境

  • 后端Python + FastAPI + MySQL + Redis本机 localhost
  • 前端Vue3 + Element Plus + TypeScript本机 localhost
  • 数据库MySQL 8.0mysql+aiomysql://root:root@localhost:3306/kaopeilian?charset=utf8mb4

结论先行TL;DR

  • 整体结论:系统主体功能已基本就绪,前后端多数领域可对接;当前联调阻断集中在“考试模块路由未注册 + 前后端契约不一致”。修复后预计半天可达端到端闭环。
  • 后端完成度(功能/稳定性):约 85%鉴权、课程、用户、陪练、管理员、Coze 网关已可用;考试路由存在但未聚合注册,部分统计接口未对齐)。
  • 前端完成度(页面/请求):约 92%(默认指向真实后端;考试模块大量调用尚未实现/未注册的端点)。
  • 联调完成度(端到端):约 70%(登录/课程/陪练/管理员链路可测;考试链路待打通)。

证据与核查要点

  • 后端 v1 路由聚合状态exams 路由文件存在,但未注册到 v1 聚合路由。
api_router = APIRouter()

# 包含各个子路由
api_router.include_router(coze_router, tags=["coze"])
# from .exam import router as exam_router
# ...
# api_router.include_router(exam_router, tags=["exams"])
  • 考试模块后端实际提供的端点(已实现但未对外可见,因未注册):
router = APIRouter(prefix="/exams", tags=["考试"])

@router.post("/start")
@router.post("/submit")
@router.get("/{exam_id}")
@router.get("/records")
@router.get("/statistics/summary")
  • 前端考试模块当前调用路径(与后端不一致):
'/api/v1/exams/dynamic/start'
'/api/v1/exams/dynamic/submit'
'/api/v1/exams/create'
`/api/v1/exams/results/*`
`/api/v1/exams/mistakes/*`
`/api/v1/exams/recommend`
  • 前端是否默认使用真实后端:是。采用环境变量,默认 USE_MOCK_DATAfalse(除非在环境中显式设置为 true)。
public readonly API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000'
public readonly USE_MOCK_DATA = import.meta.env.VITE_USE_MOCK_DATA === 'true'

补充:docker-compose.dev.yml 为前端容器预设了 VITE_USE_MOCK_DATA=true,本地裸跑建议在 .env.development 中显式设置为 false 以避免混淆。

- VITE_API_BASE_URL=http://localhost:8000
- VITE_USE_MOCK_DATA=true
  • 数据库一致性(脚本 vs 模型)
    • users 表已包含软删除字段,和 ORM 现状一致。
`is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
`deleted_at` DATETIME NULL COMMENT '删除时间',
  • 枚举大小写不一致风险:training_scenes.status 定义为大写 DRAFT/ACTIVE/INACTIVE,初始化数据却插入小写 active/draft,存在执行失败或数据异常的风险,需统一。
`status` ENUM('DRAFT', 'ACTIVE', 'INACTIVE') DEFAULT 'DRAFT'
INSERT INTO training_scenes (..., status, ...) VALUES
('Python编程助手', ..., 'active', ...),
('面试模拟', ..., 'active', ...),
('项目讨论', ..., 'draft', ...);
  • 管理员与岗位管理端点:前端 /api/v1/admin/* 系列与后端 admin.py/positions.py 已对齐并注册,功能可联调。

完成度评估(按域)

  • 鉴权与用户:登录、鉴权中间件与受保护接口工作正常;个人信息页已对接 GET/PUT /api/v1/users/me。完成度:高。
  • 课程中心:课程列表/详情可联调;课程考试设置、岗位分配已具备 API。完成度高。
  • 陪练模块:场景/会话/消息/报告模型与 API 存在;需最少 1 条 ACTIVE 场景数据用于端到端验证。完成度:中高。
  • 管理员与岗位管理/api/v1/admin/* 端点齐备,岗位成员与课程关联落库真实可查。完成度:高。
  • 考试模块:路由文件存在但未注册,前端契约与后端不一致,链路未贯通。完成度:中。

主要问题与影响

  1. 考试模块未注册至 v1 聚合路由,前端请求返回 404阻断端到端联调。
  2. 前端考试契约与后端差异大dynamic/create/results/mistakes/recommend 等端点未在后端实现),需二选一对齐。
  3. 数据初始化脚本的枚举大小写与定义不一致,可能导致初始化失败或隐性数据问题。
  4. 前端容器化开发时 VITE_USE_MOCK_DATA=true 的默认值可能引入歧义,建议统一基线为本地开发默认关闭 Mock。
  5. 后端 README“已实现/待实现”章节与代码现状不一致(多模块已实现但仍列为待实现),影响对外认知与验收基准。

修复清单(按优先级)

  1. 注册考试路由(必须)
    • app/api/v1/__init__.py 引入并注册:from .exam import router as exam_routerapi_router.include_router(exam_router, tags=["exams"])
  2. 统一考试契约(必须)二选一:
    • A) 后端补齐前端现用端点:/exams/dynamic/*/exams/create/exams/results/*/exams/mistakes/*/exams/recommend;或
    • B) 前端改为调用后端现有端点:/exams/start/exams/submit/exams/{id}/exams/records/exams/statistics/summary
  3. 修正初始化脚本枚举值(必须)
    • 统一为与枚举定义一致的 ACTIVE/DRAFT/INACTIVE,或调整枚举定义与 ORM 以匹配现有数据。
  4. 固化前端环境基线(应做)
    • 新增 .env.developmentVITE_API_BASE_URL=http://localhost:8000VITE_USE_MOCK_DATA=false;避免 docker-compose.dev.yml 误导。
  5. 同步文档与基线(应做)
    • 更新后端 README.md 的“已实现/待实现”与数据库说明;
    • 在《规范与约定-团队基线.md》固化考试模块契约与 Mock 开关基线;
    • 在《实操联调完整Todos清单.md》勾选/补充对应任务。

验证清单(修复后需全部通过)

  • 登录/刷新 Token/访问受保护接口全通过;
  • 课程列表/详情可加载,考试设置/岗位分配可读写;
  • 至少 1 条 ACTIVE 训练场景,能创建/结束陪练会话并落库;
  • 考试链路:start → {id} → submit → records/summary 全链路 2xx数据可查
  • 管理员仪表盘/岗位管理端到端返回真实数据且结构匹配;
  • 前端 Network 面板关键请求均指向 http://localhost:8000/api/v1/*,无 Mock 命中;
  • 服务端日志无未捕获异常,错误结构统一(含 trace_id

预计工时

  • 路由注册与基本回归0.5 小时
  • 契约统一(二选一):后端补齐端点 4-8 小时;或前端改造 2-4 小时
  • 数据脚本修正与复测0.5 小时
  • 文档同步与基线更新0.5 小时
  • 合计:最快 1 天内可完成闭环(取决于契约对齐方案)

页面-接口差异清单(更新)

  • 认证模块:前后端一致,已联通。
  • 课程模块:前后端路径一致(/api/v1/courses)。
  • 管理员仪表盘:前端 /api/v1/admin/dashboard/* ↔ 后端 admin.py 已提供,联调正常。
  • 管理者模块manager前端存在大量 /api/v1/manager/*,后端无聚合路由;需复用 courses/users/training/admin 或新增 manager 聚合。
  • 学员模块trainee前端存在 /api/v1/trainee/*,后端无聚合路由;建议以 training/courses/exams 拆分映射或新增。
  • 考试模块:前端大量 dynamic/create/results/mistakes/recommend;后端现有 start/submit/{id}/records/statistics/summary 未注册;需对齐。
  • Coze 网关:前后端一致,已联通。

本次评估结论2025-09-22

  • 当前可界定为:核心功能开发完成度高,考试模块联调未打通。优先完成“考试路由注册 + 契约对齐 + 初始化数据修正”,即可进入回归与压测阶段。

考培练系统全链路联调结果汇总报告

执行时间

2025-09-21

联调环境

  • 后端Python + FastAPI + MySQL + Redis
  • 前端Vue3 + Element Plus + TypeScript
  • 本地开发环境localhost

联调步骤完成情况

已完成项目

  1. 基础环境准备

    • Docker 容器启动MySQL、Redis
    • 数据库迁移应用Alembic
    • 视图验证v_user_course_progress
  2. 后端服务

    • FastAPI 服务启动(端口 8000
    • 健康检查通过(/health
    • API 文档可访问(/docs
    • 登录接口测试成功(返回 JWT token
  3. 前端服务

    • Vue3 开发服务启动(端口 3001
    • 页面正常加载
    • 路由导航正常
    • UI 渲染正常
  4. 问题修复

    • 修复 users 表缺少软删除字段问题
    • 创建并应用数据库迁移

发现的问题

🔴 主要问题

  1. 前后端未实际对接

    • 前端默认使用模拟数据(USE_MOCK_DATA = true
    • 未发现实际的后端 API 调用
    • 前端数据全部来自本地 mock 文件
  2. 环境配置问题

    • 前端缺少 .env.development 文件
    • 模拟数据开关在代码中硬编码

🟡 次要问题

  1. 数据库架构不一致
    • SQLAlchemy 模型包含软删除字段is_deleted、deleted_at
    • 初始化 SQL 脚本中 users 表缺少这些字段
    • 需要同步更新文档

后续建议

立即需要处理

  1. 关闭前端模拟数据

    // src/config/env.ts
    public readonly USE_MOCK_DATA = false  // 改为 false
    
  2. 创建前端环境配置文件

    • 创建 .env.development 文件
    • 配置正确的后端 API 地址
  3. 更新数据库初始化脚本

    • init_database_unified.sql 中为 users 表添加软删除字段
    • 更新 数据库架构-统一版.md 文档

验证清单

完成上述修改后,需要验证:

  1. 前端登录页面调用真实后端 API
  2. 课程列表从后端获取数据
  3. 陪练功能与后端正常交互
  4. 考试功能与后端正常交互
  5. 用户权限控制正常工作

系统完成度评估

后端完成度90%

  • 所有 API 接口已实现
  • 数据库结构完整
  • 认证授权机制完善
  • ⚠️ 需要补充更多集成测试

前端完成度95%

  • 所有页面已实现
  • UI/UX 设计完整
  • 路由和权限控制完善
  • 未与真实后端对接

整体集成度60%

  • 开发环境可运行
  • 基础设施完备
  • 前后端未实际集成
  • ⚠️ 需要端到端测试

下一步行动计划

  1. 修改前端配置关闭模拟数据(优先级:高)
  2. 进行真实的前后端联调测试(优先级:高)
  3. 更新数据库文档保持一致性(优先级:中)
  4. 编写端到端测试用例(优先级:中)
  5. 性能测试和优化(优先级:低)

预计完成时间

  • 关闭模拟数据并重新测试1小时
  • 完整的端到端测试2-3小时
  • 文档更新30分钟
  • 总计约4小时可完成全部集成工作

本次评估结论2025-09-21

核心检查结果

  • 后端已注册路由:/api/v1/auth/api/v1/courses/api/v1/users/api/v1/training/api/v1/admin/api/v1/coze/api/v1/exams 路由文件存在但尚未注册至 v1 聚合路由。
  • 前端请求封装使用 env.API_BASE_URL(默认 http://localhost:8000VITE_USE_MOCK_DATA 未设置时按默认值关闭 Mock/src/api/mock/* 文件存在但不影响真实请求。
  • 前端考试模块大量使用 /api/v1/exams/dynamic/*/api/v1/exams/create/api/v1/exams/results/*/api/v1/exams/mistakes/* 等端点,后端当前未提供这些接口;后端现有考试接口为:/api/v1/exams/start/api/v1/exams/submit/api/v1/exams/{exam_id}/api/v1/exams/records/api/v1/exams/statistics/summary(但未注册)。

发现的问题(本次)

  1. 考试模块联调阻断:后端未注册考试路由;前端与后端在考试领域的 API 契约不一致(命名与路径差异大)。
  2. 训练模块可用性依赖数据:需要至少一个 ACTIVE 场景以完成端到端验证。
  3. 文档一致性:后端 README “已实现/待实现”与代码现状有出入(鉴权、课程、用户、管理员模块已实现)。

完成度评估(覆盖本次复核)

  • 后端完成度80%
    • 已实现鉴权、课程、用户、陪练、管理员、Coze 网关
    • 待完善:考试路由注册与契约统一;补充动态考试/错题等接口或调整前端调用
  • 前端完成度90%
    • 页面与导航完整、请求封装与环境管理完善,默认使用真实后端
    • 待完善:考试模块接口对齐后端现状
  • 联调完成度65%
    • 管理台、鉴权、课程与陪练接口路径一致性较好
    • 考试模块尚未端到端贯通

下一步行动(建议按优先级执行)

  1. app/api/v1/__init__.py 注册考试路由:api_router.include_router(exam_router, tags=["exams"]),并按需统一前缀。
  2. 双向对齐考试契约:二选一
    • A) 后端补齐前端现用端点dynamic/create/results/mistakes/recommend
    • B) 前端改为调用后端现有端点start/submit/{id}/records/statistics/summary
  3. 准备训练与考试最小化数据:新增 1 个 ACTIVE 场景、1 套课程与试题,形成可演示链路。
  4. 更新后端 README 的“已实现/待实现”章节,保持与代码一致。

研判结论

  • 当前可视为“核心功能开发基本完成,考试模块联调未打通”。完成行动 1-3 后,预计半天可达成端到端闭环并进入回归与压测阶段。

页面-接口对接差异清单(新增 2025-09-21

  • 认证模块:
    • 前端:/api/v1/auth/login|logout|refresh|me;后端:已提供 /api/v1/auth/*/api/v1/users/me,对接正常。
  • 课程模块:
    • 前端:GET /api/v1/coursesGET /api/v1/courses/{id};后端:courses.py 已提供,路径一致。
  • 管理员仪表盘:
    • 前端:/api/v1/admin/dashboard/*;后端:admin.py 已提供 stats/user-growth/course-completion,对接正常。
  • 管理者模块manager
    • 前端存在大量 /api/v1/manager/* 请求;后端未发现 prefix="/manager" 的路由模块,需新增或前端改为复用现有 courses/users 等接口。
  • 学员模块trainee
    • 前端存在 /api/v1/trainee/* 请求(成长路径、练习、记录等);后端当前无 prefix="/trainee" 路由,需要以 trainingcourses 等现有模块拆分映射或新增 trainee 聚合路由。
  • 考试模块:
    • 前端:/api/v1/exams/dynamic/*/api/v1/exams/create/api/v1/exams/results/*/api/v1/exams/mistakes/*/api/v1/exams/recommend
    • 后端:提供 start/submit/{id}/records/statistics/summaryexam.py 但未注册到 v1其余端点尚未实现。
  • Coze 网关:
    • 前端:/api/v1/course-chat/*/api/v1/training/sessions/*/api/v1/chat/messages/api/v1/sessions/{id}/messages
    • 后端:coze_gateway.py 已提供对应端点,路径一致。

建议修复顺序:

  1. 注册 exam_router 并最小化打通 start/submit/{id}records
  2. 明确 managertrainee 的接口归属:新增对应路由模块,或将前端改为调用现有 courses/users/training 的 REST 端点。
  3. 出一版“考试模块契约对齐表”,决定前端改造或后端补齐的清单与里程碑。