后端第一步开发完成,第一版回归测试完成

This commit is contained in:
Your Name
2026-01-31 19:09:48 +08:00
parent 11cef531bd
commit c9e75030af
26 changed files with 1686 additions and 184 deletions
+31 -13
View File
@@ -1,29 +1,35 @@
# 项目管理系统后端
依据《产品文档》与《API 文档》,Python + FastAPI 实现,TDD 开发
依据《产品文档》与《API 文档》,Python + FastAPI 实现,数据持久化到 MySQLocean 库)
## 目录结构
```
backend/
├── src/ # 后端源码
├── src/ # 后端源码
│ ├── __init__.py
── app.py # FastAPI 应用与路由
├── tests/ # 测试用例
├── pytest.ini # pytest 配置(pythonpath = src
── app.py # FastAPI 应用与路由
│ ├── config.py # 配置(环境变量)
│ ├── database.py # MySQL 连接
│ ├── auth.py # 登录、Token 校验
│ └── projects_repo.py # 项目与操作日志数据层
├── tests/ # 测试(由测试工程师维护)
├── schema.sql # 数据库表结构
├── .env.example # 环境变量示例
├── requirements.txt
└── API.md
```
## 运行测试
## 环境与数据库
```bash
cd backend
source .venv/bin/activate
pytest tests/ -v
```
pytest 会通过 `pytest.ini``pythonpath = src` 自动把 `src` 加入 Python 路径,无需手动设置 PYTHONPATH。
1. 复制 `.env.example``.env`,按本地 MySQL 填写 `MYSQL_*`
2. 执行 `schema.sql` 创建数据库 `ocean` 及表(users、projects、operation_logs)。**若已有 projects 表**,需补加四个日期原文列:见下方「数据库迁移」。
3. **首次使用**:在 `users` 表中插入至少一个用户;`password_hash` 需用 bcrypt 哈希。可在 Python 中执行:
```python
from app.auth import hash_password
print(hash_password("你的密码")) # 将输出写入 INSERT 语句
```
示例 SQL`INSERT INTO users (id, username, password_hash, role, display_name) VALUES ('user-1', 'market', '<上面输出的哈希>', '市场部', '市场部');`
## 启动服务
@@ -39,3 +45,15 @@ PYTHONPATH=src uvicorn app:app --reload --host 0.0.0.0 --port 8000
cd backend/src
uvicorn app:app --reload --host 0.0.0.0 --port 8000
```
## 功能说明
- **认证**`POST /api/auth/login` 校验 users 表账号密码,签发 token(内存存储);后续请求头 `Authorization: Bearer <token>`。
- **项目列表**:分页,支持按项目名称/合同编号搜索(searchType + keyword)、按进度/费用筛选(progress、cost)、时间筛选(dateFilterType + dateFrom/dateTo,仅对「日期正常」项目)、日期异常筛选(dateAbnormal 为 true 时只返回日期异常项目)。
- **项目详情/新建/更新**:与 API 文档一致;新建仅市场部;更新时写入 operation_logs。
- **操作日志**:按项目 id 分页查询,含操作人、时间、修改摘要。
## 数据库迁移(已有 projects 表时)
1. **日期原文列**(若无):执行 `PYTHONPATH=src python scripts/migrate_add_date_str_columns.py`,或执行 README 中「增加四个 _str 列」的 SQL。
2. **三列改为字符串**(质保期截止日、中标合同金额、工程款拨付方式):执行 `PYTHONPATH=src python scripts/migrate_string_columns.py`。