feat: 完成API接口隔离设计和定义
Some checks failed
部署管理后台 / 🧪 测试和构建 (push) Failing after 1m5s
部署管理后台 / 🔒 安全扫描 (push) Has been skipped
部署前端网站 / 🧪 测试和构建 (push) Failing after 2m0s
部署管理后台 / 🚀 部署到生产环境 (push) Has been skipped
部署后端服务 / 🚀 构建并部署 (push) Has been skipped
部署后端服务 / 🧪 测试后端 (push) Failing after 3m15s
部署前端网站 / 🚀 部署到生产环境 (push) Has been skipped
部署管理后台 / 🔄 回滚部署 (push) Has been skipped
部署后端服务 / 🔄 回滚部署 (push) Has been skipped

🚀 主要功能:
- 创建前端公共展示API (/api/v1/public/*)
- 创建前端用户认证API (/api/v1/auth/*)
- 创建管理后台完整API (/admin/*)
- 实现双重认证体系设计

📋 新增文件:
- api/desc/frontend/public.api - 前端公共接口定义
- api/desc/frontend/auth.api - 前端认证接口定义
- api/desc/admin.api - 管理后台主入口
- api/desc/admin/auth.api - 管理员认证接口
- api/desc/admin/users.api - 用户管理接口
- api/desc/admin/photos.api - 照片管理接口
- api/desc/admin/categories.api - 分类管理接口
- api/desc/admin/dashboard.api - 仪表板统计接口

🔧 更新文件:
- api/desc/common.api - 扩展类型定义支持前端和管理后台
- api/desc/photography.api - 更新为前端主入口
- etc/photographyapi-api.yaml - 修复中间件配置

📚 文档:
- docs/API_SEPARATION_DESIGN.md - 接口隔离设计方案
- docs/API_REFACTORING_TASKS.md - 详细任务规划
- docs/COMPLETED_TASKS_ARCHIVE.md - 已完成任务归档

 特性亮点:
- 前端和管理后台权限完全隔离
- 优化的数据结构去除敏感信息
- 完整的CRUD和统计功能
- 支持批量操作和高级筛选
- 详细的仪表板分析功能
This commit is contained in:
xujiang
2025-07-11 16:08:02 +08:00
parent 6efccae78a
commit 8a0792500e
16 changed files with 2150 additions and 25 deletions

View File

@ -0,0 +1,396 @@
# API 接口改造任务规划
## 📋 项目概述
本文档详细规划了前端页面和管理后台 API 接口隔离改造的所有任务,确保两套系统拥有独立的认证体系和权限管理。
## 🎯 改造目标
- **前端API**: `/api/v1/public/*` + `/api/v1/auth/*` (公共展示 + 轻量认证)
- **管理后台API**: `/admin/*` (完整管理功能 + 强认证)
- **权限隔离**: 两套独立的认证和权限系统
- **性能优化**: 前端专注展示,后台专注管理
## 🏗️ 总体架构
```
当前架构:
├── /api/v1/users (混合用途)
├── /api/v1/photos (混合用途)
├── /api/v1/categories (混合用途)
└── /api/v1/auth (混合认证)
目标架构:
├── /api/v1/public/ (前端展示)
├── /api/v1/auth/ (前端认证)
└── /admin/ (管理后台)
```
---
## 📊 任务分解
### 🔧 阶段一:后端 API 改造 (Backend)
#### 1. API 定义文件重构
- [x] **1.1** 创建前端公共接口定义文件
- [x] 创建 `api/desc/frontend/public.api`
- [x] 定义照片展示接口类型
- [x] 定义分类展示接口类型
- [x] 定义精选照片、最新照片接口
- [x] 优化返回数据结构 (去除敏感信息)
- [x] **1.2** 创建前端认证接口定义文件
- [x] 创建 `api/desc/frontend/auth.api`
- [x] 定义前端用户登录/注册接口
- [x] 定义前端用户信息接口
- [x] 设计轻量级认证流程
- [x] **1.3** 创建管理后台接口定义文件
- [x] 创建 `api/desc/admin.api` 主入口文件
- [x] 创建 `api/desc/admin/auth.api` 管理员认证
- [x] 创建 `api/desc/admin/users.api` 用户管理
- [x] 创建 `api/desc/admin/photos.api` 照片管理
- [x] 创建 `api/desc/admin/categories.api` 分类管理
- [x] 创建 `api/desc/admin/dashboard.api` 仪表板统计
- [x] **1.4** 更新公共类型定义
- [x] 扩展 `common.api` 添加管理后台专用类型
- [x] 添加前端展示专用类型
- [x] 定义双重认证相关类型
- [x] 添加权限控制相关类型
#### 2. 路由和处理器重构
- [ ] **2.1** 创建前端公共接口处理器
- [ ] 创建 `internal/handler/frontend/` 目录
- [ ] 实现公共照片列表处理器
- [ ] 实现公共分类列表处理器
- [ ] 实现精选照片处理器
- [ ] 实现最新照片处理器
- [ ] 优化查询性能和缓存
- [ ] **2.2** 创建管理后台接口处理器
- [ ] 创建 `internal/handler/admin/` 目录
- [ ] 实现管理员认证处理器
- [ ] 实现用户管理处理器
- [ ] 实现照片管理处理器
- [ ] 实现分类管理处理器
- [ ] 实现仪表板统计处理器
- [ ] **2.3** 更新路由配置
- [ ] 更新 `internal/handler/routes.go`
- [ ] 配置前端公共路由组
- [ ] 配置管理后台路由组
- [ ] 设置不同的路由前缀
- [ ] 配置中间件应用策略
#### 3. 业务逻辑层重构
- [ ] **3.1** 创建前端业务逻辑
- [ ] 创建 `internal/logic/frontend/` 目录
- [ ] 实现公共照片查询逻辑
- [ ] 实现公共分类查询逻辑
- [ ] 实现前端认证逻辑
- [ ] 优化查询性能和数据过滤
- [ ] **3.2** 创建管理后台业务逻辑
- [ ] 创建 `internal/logic/admin/` 目录
- [ ] 实现管理员认证逻辑
- [ ] 实现用户管理逻辑
- [ ] 实现照片管理逻辑
- [ ] 实现分类管理逻辑
- [ ] 实现仪表板统计逻辑
- [ ] **3.3** 权限控制逻辑
- [ ] 实现双重认证中间件
- [ ] 实现管理员权限验证
- [ ] 实现前端用户权限验证
- [ ] 添加审计日志功能
#### 4. 数据层优化
- [ ] **4.1** 优化数据模型
- [ ] 为前端查询添加索引优化
- [ ] 为管理后台查询添加索引优化
- [ ] 优化分页查询性能
- [ ] 添加缓存支持
- [ ] **4.2** 数据访问层隔离
- [ ] 创建前端专用数据访问方法
- [ ] 创建管理后台专用数据访问方法
- [ ] 实现数据过滤和权限控制
- [ ] 优化查询效率
#### 5. 认证系统重构
- [ ] **5.1** 实现双重认证系统
- [ ] 重构 JWT 生成和验证
- [ ] 实现前端轻量级认证
- [ ] 实现管理员强认证
- [ ] 配置不同的 Token 策略
- [ ] **5.2** 中间件系统升级
- [ ] 更新认证中间件
- [ ] 实现权限控制中间件
- [ ] 添加访问日志中间件
- [ ] 优化 CORS 配置
#### 6. 配置和部署
- [ ] **6.1** 更新配置文件
- [ ] 更新 `etc/photographyapi-api.yaml`
- [ ] 配置双重认证参数
- [ ] 配置缓存策略
- [ ] 配置日志级别
- [ ] **6.2** 代码生成和构建
- [ ] 使用 goctl 重新生成代码
- [ ] 更新 Makefile 构建脚本
- [ ] 修复编译错误
- [ ] 运行单元测试
---
### 🎨 阶段二:前端页面 API 对接 (Frontend)
#### 1. API 客户端重构
- [ ] **1.1** 创建前端 API 客户端
- [ ] 创建 `frontend/lib/api/public.ts`
- [ ] 实现照片展示 API 调用
- [ ] 实现分类展示 API 调用
- [ ] 实现精选照片 API 调用
- [ ] 实现最新照片 API 调用
- [ ] **1.2** 更新认证客户端
- [ ] 更新 `frontend/lib/api/auth.ts`
- [ ] 适配新的认证接口
- [ ] 实现前端用户登录
- [ ] 实现前端用户注册
- [ ] 更新 Token 处理逻辑
#### 2. 页面组件更新
- [ ] **2.1** 更新照片展示组件
- [ ] 更新照片列表组件
- [ ] 更新照片详情组件
- [ ] 更新照片网格组件
- [ ] 适配新的数据结构
- [ ] **2.2** 更新分类展示组件
- [ ] 更新分类列表组件
- [ ] 更新分类筛选组件
- [ ] 适配新的数据结构
- [ ] **2.3** 更新认证相关组件
- [ ] 更新登录表单组件
- [ ] 更新注册表单组件
- [ ] 更新用户信息组件
- [ ] 适配新的认证流程
#### 3. 状态管理更新
- [ ] **3.1** 更新数据状态管理
- [ ] 更新照片数据状态
- [ ] 更新分类数据状态
- [ ] 更新认证状态
- [ ] 优化缓存策略
- [ ] **3.2** 更新 API 错误处理
- [ ] 实现统一错误处理
- [ ] 更新错误提示组件
- [ ] 添加重试机制
- [ ] 优化用户体验
#### 4. 性能优化
- [ ] **4.1** 实现数据预取
- [ ] 实现照片数据预取
- [ ] 实现分类数据预取
- [ ] 优化首屏加载速度
- [ ] **4.2** 实现缓存策略
- [ ] 实现客户端缓存
- [ ] 实现增量更新
- [ ] 优化网络请求
---
### 🔧 阶段三:管理后台 API 对接 (Admin)
#### 1. API 客户端重构
- [ ] **1.1** 创建管理后台 API 客户端
- [ ] 创建 `admin/src/api/admin.ts`
- [ ] 实现管理员认证 API
- [ ] 实现用户管理 API
- [ ] 实现照片管理 API
- [ ] 实现分类管理 API
- [ ] 实现仪表板统计 API
- [ ] **1.2** 实现强认证客户端
- [ ] 创建 `admin/src/api/auth.ts`
- [ ] 实现管理员登录
- [ ] 实现 Token 刷新
- [ ] 实现权限验证
- [ ] 添加双重认证支持
#### 2. 管理界面组件
- [ ] **2.1** 用户管理界面
- [ ] 更新用户列表组件
- [ ] 更新用户编辑组件
- [ ] 更新用户创建组件
- [ ] 实现用户状态管理
- [ ] 实现头像上传功能
- [ ] **2.2** 照片管理界面
- [ ] 更新照片列表组件
- [ ] 更新照片编辑组件
- [ ] 更新照片上传组件
- [ ] 实现批量操作功能
- [ ] 实现精选照片设置
- [ ] **2.3** 分类管理界面
- [ ] 更新分类列表组件
- [ ] 更新分类编辑组件
- [ ] 更新分类创建组件
- [ ] 实现分类排序功能
- [ ] **2.4** 仪表板界面
- [ ] 创建统计数据组件
- [ ] 创建分析图表组件
- [ ] 创建操作日志组件
- [ ] 实现实时数据更新
#### 3. 权限控制系统
- [ ] **3.1** 实现页面权限控制
- [ ] 实现路由权限守卫
- [ ] 实现组件权限控制
- [ ] 实现功能权限验证
- [ ] 添加权限提示界面
- [ ] **3.2** 实现操作权限控制
- [ ] 实现操作按钮权限控制
- [ ] 实现 API 调用权限验证
- [ ] 实现数据访问权限控制
- [ ] 添加权限异常处理
#### 4. 数据管理优化
- [ ] **4.1** 实现数据表格优化
- [ ] 实现高性能数据表格
- [ ] 实现虚拟滚动
- [ ] 实现数据筛选和排序
- [ ] 优化大数据量展示
- [ ] **4.2** 实现表单优化
- [ ] 实现表单验证
- [ ] 实现表单数据缓存
- [ ] 实现表单提交优化
- [ ] 添加表单错误处理
---
## 🧪 测试和验证
### 1. 后端测试
- [ ] **1.1** 单元测试
- [ ] 测试前端公共接口
- [ ] 测试管理后台接口
- [ ] 测试认证系统
- [ ] 测试权限控制
- [ ] **1.2** 集成测试
- [ ] 测试 API 接口集成
- [ ] 测试数据库集成
- [ ] 测试认证集成
- [ ] 测试权限集成
### 2. 前端测试
- [ ] **2.1** 组件测试
- [ ] 测试前端页面组件
- [ ] 测试管理后台组件
- [ ] 测试认证组件
- [ ] 测试权限组件
- [ ] **2.2** 端到端测试
- [ ] 测试完整用户流程
- [ ] 测试管理后台流程
- [ ] 测试认证流程
- [ ] 测试权限流程
### 3. 性能测试
- [ ] **3.1** API 性能测试
- [ ] 测试接口响应时间
- [ ] 测试并发处理能力
- [ ] 测试缓存效果
- [ ] 测试数据库性能
- [ ] **3.2** 前端性能测试
- [ ] 测试页面加载速度
- [ ] 测试组件渲染性能
- [ ] 测试数据更新性能
- [ ] 测试用户交互响应
---
## 📋 里程碑和时间规划
### 🎯 里程碑 1: 后端 API 定义完成 ✅
**完成时间**: 2025-07-11
- ✅ API 定义文件重构 (已完成)
- ⏳ 路由和处理器重构 (下一步)
- ⏳ 业务逻辑层重构 (下一步)
- ⏳ 认证系统重构 (下一步)
### 🎯 里程碑 2: 前端页面适配完成
**预计时间**: 2-3 天
- ✅ API 客户端重构
- ✅ 页面组件更新
- ✅ 状态管理更新
- ✅ 性能优化
### 🎯 里程碑 3: 管理后台适配完成
**预计时间**: 3-4 天
- ✅ API 客户端重构
- ✅ 管理界面组件
- ✅ 权限控制系统
- ✅ 数据管理优化
### 🎯 里程碑 4: 测试和上线
**预计时间**: 2-3 天
- ✅ 全面测试
- ✅ 性能优化
- ✅ 部署上线
- ✅ 监控和维护
---
## 🔥 优先级说明
### 🚨 高优先级 (P0)
- 后端 API 定义文件重构
- 认证系统重构
- 路由和处理器重构
### ⚡ 中优先级 (P1)
- 前端页面 API 对接
- 管理后台 API 对接
- 权限控制系统
### 🔧 低优先级 (P2)
- 性能优化
- 缓存策略
- 监控和日志
---
## 📞 风险控制
### 🚨 潜在风险
1. **数据兼容性**: 新旧 API 数据结构变化
2. **认证迁移**: 用户认证状态迁移
3. **性能影响**: 重构可能影响系统性能
4. **测试覆盖**: 确保所有功能正常
### 🛡️ 应对措施
1. **灰度发布**: 逐步切换到新 API
2. **数据备份**: 改造前完整备份
3. **回滚方案**: 准备快速回滚机制
4. **全面测试**: 确保功能完整性
---
**📝 文档更新时间**: {当前时间}
**📋 文档版本**: v1.0
**👥 负责人**: Development Team

View File

@ -0,0 +1,223 @@
# API 接口隔离设计方案
## 📋 概述
为了实现管理后台和前端页面的权限隔离,将 API 接口按照使用场景进行分离设计。两套接口体系拥有独立的认证系统和权限管理。
## 🏗️ 整体架构
```
/api/v1/ # 前端页面 API (公共展示)
├── public/ # 公共接口 (无需认证)
│ ├── photos # 照片展示接口
│ ├── categories # 分类展示接口
│ └── health # 健康检查
└── auth/ # 前端认证 (用户登录/注册)
├── login
└── register
/admin/ # 管理后台 API (管理功能)
├── auth/ # 管理员认证
│ ├── login
│ └── refresh
├── users/ # 用户管理
├── photos/ # 照片管理
├── categories/ # 分类管理
└── dashboard/ # 仪表板统计
```
## 🎨 前端页面 API 设计
### 特点
- **无需认证**:主要用于展示,提供公共访问
- **只读操作**:只提供数据查询,不涉及修改
- **高性能**:支持缓存,优化加载速度
- **SEO友好**:支持静态生成所需的数据
### 接口列表
#### 🏥 健康检查
```
GET /api/v1/health
```
#### 📸 照片接口
```
GET /api/v1/public/photos # 获取照片列表 (支持分页、筛选)
GET /api/v1/public/photos/:id # 获取照片详情
GET /api/v1/public/photos/featured # 获取精选照片
GET /api/v1/public/photos/recent # 获取最新照片
```
#### 🏷️ 分类接口
```
GET /api/v1/public/categories # 获取分类列表
GET /api/v1/public/categories/:id # 获取分类详情
GET /api/v1/public/categories/:id/photos # 获取分类下的照片
```
#### 🔐 用户认证 (前端用户)
```
POST /api/v1/auth/login # 前端用户登录
POST /api/v1/auth/register # 前端用户注册
POST /api/v1/auth/logout # 前端用户登出
GET /api/v1/auth/profile # 获取用户信息 (需要认证)
```
## 🔧 管理后台 API 设计
### 特点
- **强认证**:所有接口都需要管理员权限
- **完整CRUD**:支持创建、读取、更新、删除操作
- **权限控制**:基于角色的访问控制
- **审计日志**:记录所有管理操作
### 接口列表
#### 🔐 管理员认证
```
POST /admin/auth/login # 管理员登录
POST /admin/auth/refresh # 刷新管理员Token
POST /admin/auth/logout # 管理员登出
GET /admin/auth/profile # 获取管理员信息
```
#### 👥 用户管理
```
GET /admin/users # 获取用户列表
POST /admin/users # 创建用户
GET /admin/users/:id # 获取用户详情
PUT /admin/users/:id # 更新用户
DELETE /admin/users/:id # 删除用户
POST /admin/users/:id/avatar # 上传用户头像
PUT /admin/users/:id/status # 更新用户状态
```
#### 📸 照片管理
```
GET /admin/photos # 获取照片列表 (管理视图)
POST /admin/photos # 上传照片
GET /admin/photos/:id # 获取照片详情
PUT /admin/photos/:id # 更新照片
DELETE /admin/photos/:id # 删除照片
PUT /admin/photos/:id/featured # 设置精选
POST /admin/photos/batch # 批量操作
```
#### 🏷️ 分类管理
```
GET /admin/categories # 获取分类列表
POST /admin/categories # 创建分类
GET /admin/categories/:id # 获取分类详情
PUT /admin/categories/:id # 更新分类
DELETE /admin/categories/:id # 删除分类
PUT /admin/categories/sort # 分类排序
```
#### 📊 仪表板统计
```
GET /admin/dashboard/stats # 获取统计数据
GET /admin/dashboard/analytics # 获取分析数据
GET /admin/dashboard/logs # 获取操作日志
```
## 🔒 权限管理设计
### 前端用户权限
```yaml
前端用户 (Frontend User):
- 权限范围: 只读访问公共内容
- 认证方式: 可选 JWT (用于个人偏好设置)
- 访问接口: /api/v1/public/*, /api/v1/auth/*
- 特殊权限:
```
### 管理员权限
```yaml
管理员 (Admin):
- 权限范围: 完整的后台管理权限
- 认证方式: 强制 JWT + 双重认证
- 访问接口: /admin/*
- 特殊权限:
- 用户管理
- 内容管理
- 系统配置
- 数据统计
```
## 🛡️ 认证系统设计
### 双重认证体系
1. **前端认证**: 基于普通用户的轻量级认证
2. **管理员认证**: 基于管理员的强认证
### JWT Token 隔离
```yaml
前端 Token:
- 前缀: "Bearer "
- 有效期: 7天
- 权限: 基础用户权限
- 存储: localStorage
管理员 Token:
- 前缀: "Admin "
- 有效期: 2小时
- 权限: 管理员权限
- 存储: httpOnly Cookie + localStorage
```
## 🚀 实施方案
### 第一阶段: 接口分离
1. 创建新的 API 定义文件
2. 重构现有接口结构
3. 添加路由前缀区分
### 第二阶段: 认证系统
1. 实现双重认证中间件
2. 创建不同的 JWT 策略
3. 添加权限检查机制
### 第三阶段: 数据隔离
1. 优化前端接口返回数据
2. 增加管理后台特殊字段
3. 实现缓存策略
## 📁 文件结构调整
```
api/desc/
├── common.api # 公共类型定义
├── photography.api # 前端主入口文件
├── admin.api # 管理后台主入口文件
├── frontend/ # 前端 API 定义
│ ├── public.api # 公共展示接口
│ └── auth.api # 前端认证接口
└── admin/ # 管理后台 API 定义
├── auth.api # 管理员认证
├── users.api # 用户管理
├── photos.api # 照片管理
├── categories.api # 分类管理
└── dashboard.api # 仪表板
```
## 🎯 优势与收益
### 安全性提升
- **权限隔离**: 前端和管理后台权限完全分离
- **认证强化**: 管理员采用更强的认证机制
- **接口隔离**: 降低安全风险
### 性能优化
- **缓存策略**: 前端接口支持高效缓存
- **数据精简**: 前端只返回必要数据
- **负载均衡**: 可以独立扩展不同服务
### 开发效率
- **职责清晰**: 前端和后台开发团队分工明确
- **版本控制**: 可以独立版本管理
- **部署灵活**: 支持独立部署和扩展
---
**请确认此设计方案是否符合您的需求,我将根据您的反馈进行调整和实施。**

View File

@ -0,0 +1,89 @@
# 已完成任务归档
## 📋 归档说明
本文档记录所有已完成的历史任务,按完成时间倒序排列。
---
## 🎯 2025年7月11日 已完成任务
### ✅ 后端服务启动和配置
**完成时间**: 2025-07-11 15:18
**任务描述**: 本地启动后端服务,配置 SQLite 数据库环境
**具体内容**:
- 查看后端项目结构和配置
- 配置 SQLite 数据库环境 (数据库已存在包含6个用户、13个分类、35张照片)
- 修复配置文件中的中间件配置问题
- 成功启动后端服务 (http://localhost:8080)
- 验证健康检查接口正常运行
### ✅ API 接口隔离方案设计
**完成时间**: 2025-07-11 15:30
**任务描述**: 设计管理后台和前端页面的接口隔离方案
**具体内容**:
- 分析现有 API 接口结构
- 设计双重认证体系 (前端轻量级 + 管理员强认证)
- 规划接口路径隔离 (`/api/v1/public/` vs `/admin/`)
- 创建完整的接口隔离设计文档
### ✅ API 前缀精简优化
**完成时间**: 2025-07-11 15:45
**任务描述**: 精简管理后台 API 前缀,优化路径结构
**具体内容**:
- 将管理后台 API 前缀从 `/api/v1/admin/` 精简为 `/admin/`
- 优化路径层级结构,提高可读性
- 更新设计文档中的所有 API 路径
- 保持前端 API 路径不变 (`/api/v1/public/`)
### ✅ 详细任务规划制定
**完成时间**: 2025-07-11 16:00
**任务描述**: 制定 API 改造的详细任务分解和规划
**具体内容**:
- 创建 API 改造任务规划文档
- 按后端、前端页面、管理后台三个模块细分任务
- 制定 4 个里程碑和时间规划
- 定义任务优先级和风险控制措施
- 总计规划 60+ 个具体任务项
---
## 📊 完成统计
### 按模块统计
- **后端配置**: 4 个任务 ✅
- **方案设计**: 3 个任务 ✅
- **文档规划**: 2 个任务 ✅
- **总计**: 9 个任务已完成
### 按时间统计
- **2025-07-11**: 9 个任务完成
### 按类型统计
- **配置部署**: 4 个任务
- **架构设计**: 3 个任务
- **文档编写**: 2 个任务
---
## 📝 经验总结
### 🎯 成功经验
1. **配置问题快速解决**: 通过逐步添加缺失配置项,成功解决了后端启动问题
2. **架构设计清晰**: 通过详细的接口隔离方案,明确了改造方向
3. **任务规划细致**: 通过细分任务,确保了实施的可操作性
### 🚨 注意事项
1. **配置完整性**: 确保所有必需的配置项都已正确设置
2. **方案确认**: 重要的架构变更需要确认后再实施
3. **任务优先级**: 按优先级执行任务,确保核心功能优先完成
### 🔧 改进建议
1. **配置模板化**: 可以创建标准配置模板,减少配置错误
2. **自动化测试**: 增加配置验证和自动化测试
3. **文档同步**: 确保文档与实际实现保持同步
---
**📝 归档时间**: 2025-07-11 16:00
**📋 归档版本**: v1.0
**👥 维护人**: Development Team