1.9 KiB
1.9 KiB
Phase 2:后端基础 API + 数据库迁移
新增内容
- ORM:
app/models/(User, ChatSession, Message, Ticket),SQLAlchemy 2.x - 数据库:
app/database.py异步会话,get_db依赖 - 迁移:Alembic,
alembic/versions/001_init_tables.py、002_seed_admin.py - 认证:
app/services/auth_service.py(bcrypt + JWT),app/deps.py(get_current_user_id) - 登录:
POST /api/auth/login查 User 表并校验密码,返回 JWT
本地启动与迁移
- 启动 DB(或整栈):
docker-compose up -d db - 在
backend/下执行迁移(需已配置DATABASE_URL_SYNC,如从项目根.env加载):cd backend # 若 .env 在项目根,可:export $(grep -v '^#' ../.env | xargs) 或复制 .env 到 backend/ alembic upgrade head - 启动后端:
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
验证
- 健康检查:
curl http://localhost:8000/api/health→code: 0, data.status: "up" - 登录:
curl -X POST http://localhost:8000/api/auth/login -H "Content-Type: application/json" -d "{\"username\":\"admin\",\"password\":\"admin\"}"- 迁移并 seed 后应返回
code: 0且data.access_token为 JWT
- 迁移并 seed 后应返回
- 测试:
pytest tests/test_health.py tests/test_auth.py -v
关键配置项
DATABASE_URL:异步连接串,供 FastAPI 使用(如postgresql+asyncpg://...)DATABASE_URL_SYNC:同步连接串,供 Alembic 使用(如postgresql://...)JWT_SECRET:生产环境必须修改JWT_EXPIRE_MINUTES:token 有效期(分钟)
Docker 内迁移
若后端在 Docker 内启动,可在首次启动时自动迁移(可选)。例如在 backend/Dockerfile 或启动脚本中:
alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000
需保证容器内能访问 DATABASE_URL_SYNC 且指向 db:5432。