Files
ctms/docs/plans/2026-03-05-rd-monitor-implementation.md
T
2026-03-10 10:10:58 +08:00

138 lines
5.0 KiB
Markdown

# rd-monitor Implementation Plan
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** 搭建独立仓库 `rd-monitor`,实现研发项目进展监测 MVP(独立鉴权、项目阶段录入、状态计算、历史留痕、CSV 导出、前端可用界面)。
**Architecture:** 后端采用 FastAPI + SQLAlchemy + PostgreSQL,提供鉴权、项目阶段、历史、导出 API;前端采用 Vue3 + Element Plus,提供登录、概览、录入、历史页面。通过 Docker Compose 启动前后端与独立 PostgreSQL。
**Tech Stack:** Vue3, Vite, Element Plus, FastAPI, SQLAlchemy, Alembic, PostgreSQL, JWT, Pytest
---
### Task 1: 初始化仓库结构与运行骨架
**Files:**
- Create: `/Users/zcc/MyCTMS/rd-monitor/README.md`
- Create: `/Users/zcc/MyCTMS/rd-monitor/docker-compose.yml`
- Create: `/Users/zcc/MyCTMS/rd-monitor/backend/requirements.txt`
- Create: `/Users/zcc/MyCTMS/rd-monitor/backend/.env.example`
- Create: `/Users/zcc/MyCTMS/rd-monitor/frontend/package.json`
- Create: `/Users/zcc/MyCTMS/rd-monitor/frontend/vite.config.ts`
**Step 1: Write the failing test**
- 编写后端 smoke 测试,断言 `/healthz` 返回 200(此时接口不存在,应失败)。
**Step 2: Run test to verify it fails**
- Run: `cd /Users/zcc/MyCTMS/rd-monitor/backend && pytest -q`
- Expected: FAIL(缺少 app 或路由)。
**Step 3: Write minimal implementation**
- 建立 FastAPI app 与 `/healthz` 路由,补全基础依赖与 compose。
**Step 4: Run test to verify it passes**
- Run: `cd /Users/zcc/MyCTMS/rd-monitor/backend && pytest -q`
- Expected: PASS。
**Step 5: Commit**
- `git add ... && git commit -m "chore: bootstrap rd-monitor skeleton"`
### Task 2: 实现后端核心领域模型与状态计算
**Files:**
- Create: `/Users/zcc/MyCTMS/rd-monitor/backend/app/models/*.py`
- Create: `/Users/zcc/MyCTMS/rd-monitor/backend/app/services/progress.py`
- Test: `/Users/zcc/MyCTMS/rd-monitor/backend/tests/test_progress_status.py`
**Step 1: Write the failing test**
- 用测试覆盖阶段状态计算(已完成/未进行/正进行/未开始)与项目过滤规则。
**Step 2: Run test to verify it fails**
- Run: `pytest tests/test_progress_status.py -q`
- Expected: FAIL。
**Step 3: Write minimal implementation**
- 实现状态计算函数与项目过滤函数。
**Step 4: Run test to verify it passes**
- Run: `pytest tests/test_progress_status.py -q`
- Expected: PASS。
**Step 5: Commit**
- `git commit -m "feat: add progress status domain rules"`
### Task 3: 实现鉴权、项目阶段 API、历史记录与导出
**Files:**
- Create/Modify: `/Users/zcc/MyCTMS/rd-monitor/backend/app/api/*.py`
- Create/Modify: `/Users/zcc/MyCTMS/rd-monitor/backend/app/schemas/*.py`
- Create/Modify: `/Users/zcc/MyCTMS/rd-monitor/backend/app/core/security.py`
- Test: `/Users/zcc/MyCTMS/rd-monitor/backend/tests/test_stage_api.py`
**Step 1: Write the failing test**
- 测试登录、查询项目阶段、更新阶段后历史新增、导出 CSV、权限拦截。
**Step 2: Run test to verify it fails**
- Run: `pytest tests/test_stage_api.py -q`
- Expected: FAIL。
**Step 3: Write minimal implementation**
- 完成相关 API 与依赖。
**Step 4: Run test to verify it passes**
- Run: `pytest tests/test_stage_api.py -q`
- Expected: PASS。
**Step 5: Commit**
- `git commit -m "feat: implement progress APIs with auth history and export"`
### Task 4: 实现前端登录、概览、录入、历史页面
**Files:**
- Create: `/Users/zcc/MyCTMS/rd-monitor/frontend/src/views/*.vue`
- Create: `/Users/zcc/MyCTMS/rd-monitor/frontend/src/router/index.ts`
- Create: `/Users/zcc/MyCTMS/rd-monitor/frontend/src/api/*.ts`
- Create: `/Users/zcc/MyCTMS/rd-monitor/frontend/src/components/*.vue`
**Step 1: Write the failing test**
- 首期用类型检查/构建作为回归保护,先运行应失败(页面未实现)。
**Step 2: Run test to verify it fails**
- Run: `cd /Users/zcc/MyCTMS/rd-monitor/frontend && npm run build`
- Expected: FAIL。
**Step 3: Write minimal implementation**
- 实现可登录、可浏览项目阶段、可编辑阶段、可看历史、可导出。
**Step 4: Run test to verify it passes**
- Run: `npm run build`
- Expected: PASS。
**Step 5: Commit**
- `git commit -m "feat: add frontend pages for monitoring workflow"`
### Task 5: 联调与最终验证
**Files:**
- Modify: `/Users/zcc/MyCTMS/rd-monitor/README.md`
**Step 1: Write the failing test**
- 先运行端到端 smoke(未配置好前应失败)。
**Step 2: Run test to verify it fails**
- Run: `docker compose up --build -d && curl -f http://localhost:8010/healthz`
- Expected: 初次 FAIL 或服务未就绪。
**Step 3: Write minimal implementation**
- 修正配置/环境变量/文档。
**Step 4: Run test to verify it passes**
- Run: `docker compose up --build -d`
- Run: `curl -f http://localhost:8010/healthz`
- Run: `cd backend && pytest -q`
- Run: `cd frontend && npm run build`
- Expected: 全部 PASS。
**Step 5: Commit**
- `git commit -m "docs: finalize rd-monitor setup and verification"`