- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
16 KiB
16 KiB
考培练系统全链路联调结果汇总报告(重写版)
执行时间
2025-09-22
联调环境
- 后端:Python + FastAPI + MySQL + Redis(本机 localhost)
- 前端:Vue3 + Element Plus + TypeScript(本机 localhost)
- 数据库:MySQL 8.0(
mysql+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_DATA为false(除非在环境中显式设置为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/*端点齐备,岗位成员与课程关联落库真实可查。完成度:高。 - 考试模块:路由文件存在但未注册,前端契约与后端不一致,链路未贯通。完成度:中。
主要问题与影响
- 考试模块未注册至 v1 聚合路由,前端请求返回 404,阻断端到端联调。
- 前端考试契约与后端差异大(dynamic/create/results/mistakes/recommend 等端点未在后端实现),需二选一对齐。
- 数据初始化脚本的枚举大小写与定义不一致,可能导致初始化失败或隐性数据问题。
- 前端容器化开发时
VITE_USE_MOCK_DATA=true的默认值可能引入歧义,建议统一基线为本地开发默认关闭 Mock。 - 后端 README“已实现/待实现”章节与代码现状不一致(多模块已实现但仍列为待实现),影响对外认知与验收基准。
修复清单(按优先级)
- 注册考试路由(必须)
- 在
app/api/v1/__init__.py引入并注册:from .exam import router as exam_router、api_router.include_router(exam_router, tags=["exams"])。
- 在
- 统一考试契约(必须)二选一:
- A) 后端补齐前端现用端点:
/exams/dynamic/*、/exams/create、/exams/results/*、/exams/mistakes/*、/exams/recommend;或 - B) 前端改为调用后端现有端点:
/exams/start、/exams/submit、/exams/{id}、/exams/records、/exams/statistics/summary。
- A) 后端补齐前端现用端点:
- 修正初始化脚本枚举值(必须)
- 统一为与枚举定义一致的
ACTIVE/DRAFT/INACTIVE,或调整枚举定义与 ORM 以匹配现有数据。
- 统一为与枚举定义一致的
- 固化前端环境基线(应做)
- 新增
.env.development:VITE_API_BASE_URL=http://localhost:8000、VITE_USE_MOCK_DATA=false;避免docker-compose.dev.yml误导。
- 新增
- 同步文档与基线(应做)
- 更新后端
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
联调步骤完成情况
✅ 已完成项目
-
基础环境准备
- ✅ Docker 容器启动(MySQL、Redis)
- ✅ 数据库迁移应用(Alembic)
- ✅ 视图验证(v_user_course_progress)
-
后端服务
- ✅ FastAPI 服务启动(端口 8000)
- ✅ 健康检查通过(/health)
- ✅ API 文档可访问(/docs)
- ✅ 登录接口测试成功(返回 JWT token)
-
前端服务
- ✅ Vue3 开发服务启动(端口 3001)
- ✅ 页面正常加载
- ✅ 路由导航正常
- ✅ UI 渲染正常
-
问题修复
- ✅ 修复 users 表缺少软删除字段问题
- ✅ 创建并应用数据库迁移
发现的问题
🔴 主要问题
-
前后端未实际对接
- 前端默认使用模拟数据(
USE_MOCK_DATA = true) - 未发现实际的后端 API 调用
- 前端数据全部来自本地 mock 文件
- 前端默认使用模拟数据(
-
环境配置问题
- 前端缺少
.env.development文件 - 模拟数据开关在代码中硬编码
- 前端缺少
🟡 次要问题
- 数据库架构不一致
- SQLAlchemy 模型包含软删除字段(is_deleted、deleted_at)
- 初始化 SQL 脚本中 users 表缺少这些字段
- 需要同步更新文档
后续建议
立即需要处理
-
关闭前端模拟数据
// src/config/env.ts public readonly USE_MOCK_DATA = false // 改为 false -
创建前端环境配置文件
- 创建
.env.development文件 - 配置正确的后端 API 地址
- 创建
-
更新数据库初始化脚本
- 在
init_database_unified.sql中为 users 表添加软删除字段 - 更新
数据库架构-统一版.md文档
- 在
验证清单
完成上述修改后,需要验证:
- 前端登录页面调用真实后端 API
- 课程列表从后端获取数据
- 陪练功能与后端正常交互
- 考试功能与后端正常交互
- 用户权限控制正常工作
系统完成度评估
后端完成度:90%
- ✅ 所有 API 接口已实现
- ✅ 数据库结构完整
- ✅ 认证授权机制完善
- ⚠️ 需要补充更多集成测试
前端完成度:95%
- ✅ 所有页面已实现
- ✅ UI/UX 设计完整
- ✅ 路由和权限控制完善
- ❌ 未与真实后端对接
整体集成度:60%
- ✅ 开发环境可运行
- ✅ 基础设施完备
- ❌ 前后端未实际集成
- ⚠️ 需要端到端测试
下一步行动计划
- 修改前端配置关闭模拟数据(优先级:高)
- 进行真实的前后端联调测试(优先级:高)
- 更新数据库文档保持一致性(优先级:中)
- 编写端到端测试用例(优先级:中)
- 性能测试和优化(优先级:低)
预计完成时间
- 关闭模拟数据并重新测试: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:8000),VITE_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(但未注册)。
发现的问题(本次)
- 考试模块联调阻断:后端未注册考试路由;前端与后端在考试领域的 API 契约不一致(命名与路径差异大)。
- 训练模块可用性依赖数据:需要至少一个 ACTIVE 场景以完成端到端验证。
- 文档一致性:后端 README “已实现/待实现”与代码现状有出入(鉴权、课程、用户、管理员模块已实现)。
完成度评估(覆盖本次复核)
- 后端完成度:80%
- 已实现:鉴权、课程、用户、陪练、管理员、Coze 网关
- 待完善:考试路由注册与契约统一;补充动态考试/错题等接口或调整前端调用
- 前端完成度:90%
- 页面与导航完整、请求封装与环境管理完善,默认使用真实后端
- 待完善:考试模块接口对齐后端现状
- 联调完成度:65%
- 管理台、鉴权、课程与陪练接口路径一致性较好
- 考试模块尚未端到端贯通
下一步行动(建议按优先级执行)
- 在
app/api/v1/__init__.py注册考试路由:api_router.include_router(exam_router, tags=["exams"]),并按需统一前缀。 - 双向对齐考试契约:二选一
- A) 后端补齐前端现用端点(dynamic/create/results/mistakes/recommend);或
- B) 前端改为调用后端现有端点(start/submit/{id}/records/statistics/summary)。
- 准备训练与考试最小化数据:新增 1 个 ACTIVE 场景、1 套课程与试题,形成可演示链路。
- 更新后端 README 的“已实现/待实现”章节,保持与代码一致。
研判结论
- 当前可视为“核心功能开发基本完成,考试模块联调未打通”。完成行动 1-3 后,预计半天可达成端到端闭环并进入回归与压测阶段。
页面-接口对接差异清单(新增 2025-09-21)
- 认证模块:
- 前端:
/api/v1/auth/login|logout|refresh|me;后端:已提供/api/v1/auth/*与/api/v1/users/me,对接正常。
- 前端:
- 课程模块:
- 前端:
GET /api/v1/courses、GET /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"路由,需要以training、courses等现有模块拆分映射或新增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/summary于exam.py但未注册到 v1;其余端点尚未实现。
- 前端:
- Coze 网关:
- 前端:
/api/v1/course-chat/*、/api/v1/training/sessions/*、/api/v1/chat/messages、/api/v1/sessions/{id}/messages; - 后端:
coze_gateway.py已提供对应端点,路径一致。
- 前端:
建议修复顺序:
- 注册
exam_router并最小化打通start/submit/{id}与records。 - 明确
manager与trainee的接口归属:新增对应路由模块,或将前端改为调用现有courses/users/training的 REST 端点。 - 出一版“考试模块契约对齐表”,决定前端改造或后端补齐的清单与里程碑。