面向个人照片管理的全栈应用:前端 React + MUI,后端 Go/Gin + Redis 队列,AI 服务基于 Python/Dashscope 自动描述与标签,存储 PostgreSQL/pgvector,Nginx 统一入口,全部容器化。
- JWT 认证、注册/登录/重置全流程
- 单张/批量上传与异步处理,缩略图生成与 AI 自动标注
- 文本向量搜索与标签搜索,照片详情/编辑/删除
- 响应式界面,桌面与移动端一致体验
| 分类 | 技术 |
|---|---|
| 前端 | React, React Router, Axios, MUI |
| 后端 API | Go, Gin |
| Worker | Go, Redis |
| AI 服务 | Python, Flask, Dashscope |
| 数据库/向量 | PostgreSQL + pgvector |
| 代理 | Nginx |
| 容器 | Docker, Docker Compose |
| CI | GitHub Actions |
User ──> Nginx (8080)
├─> Frontend (React SPA)
├─> Backend API (Go/Gin)
└─> /uploads
Backend API ──> PostgreSQL (pgvector)
Backend API ──> Redis Queue ──> Worker (Go)
Worker ──> AI Service (Python/Dashscope)
- 前端覆盖率:
npm test -- --coverage - 后端覆盖率:
go test ./... -cover -coverprofile=coverage.out && go tool cover -html=coverage.out -o coverage.html - AI 接口冒烟:
bash scripts/ai_smoke.sh - 建议在 CI 中上传覆盖率工件并作为合并前置条件。如需在 CI 跑 AI 冒烟,设置
AI_SMOKE=true并确保 AI 服务可访问。
前置:Docker 与 Docker Compose,配置 DASHSCOPE_API_KEY(通过 .env 注入,不要写死在仓库里)。
git clone <repository-url>
cd BS-hw
docker-compose up --build -d
# 访问前端 http://localhost:8080
# API 通过 http://localhost:8080/api/...
Docker 运行与“只提交配置、不提交镜像导出包”的规范见:docs/docker.md。
可选:如果你不想用 .env,可以用 docker-compose.override.yml 注入密钥(示例见 docker-compose.override.example.yml,该文件默认不提交)。
日志:
docker-compose logs -f # 全部
docker-compose logs -f backend-api
停止与清理:
docker-compose down # 停止容器
docker-compose down -v # 停止并清理数据卷
- 认证:
POST /api/auth/register|login|refresh|forgot-password|reset-password|change-password - 用户:
GET/PUT /api/profile - 照片:
POST /api/myphotos/batch-upload,GET /api/myphotos,GET/PUT/DELETE /api/myphotos/:id,POST /api/myphotos/:id/image - 标签:
GET /api/tags,POST/DELETE /api/myphotos/:id/tags - 搜索:
POST /api/mcp/search(文本搜图)
- 补充后端/前端自动化测试与契约测试,CI 覆盖率门禁
- 增强缓存与性能(懒加载、虚拟滚动、热点接口缓存)
- EXIF/地理位置高级筛选、相册分组、视频支持
- 完善错误码与用户提示、监控指标与告警、数据删除/隐私流程