## 修复内容 ### 前端 (Frontend) - 修复 ESLint 错误:未使用变量重命名为下划线前缀 - 修复 TypeScript 类型错误:完善 BackendPhoto 接口定义 - 修复引号转义问题:搜索结果显示优化 - 优化 useEffect 依赖:添加 useCallback 避免无限循环 - 移除未使用的导入和变量 ### 后端 (Backend) - 修复 go vet 错误:测试文件中的字段名称不匹配 - 修复数组访问错误:使用正确的结构体字段路径 - 统一代码格式:go fmt 自动格式化 ### 管理后台 (Admin) - 创建缺失的 ESLint 配置文件 - 修复 React 导入缺失问题 - 确保 TypeScript 编译通过 ## CI/CD 改进 - 验证了前端、后端、管理后台的完整构建流程 - 所有 lint 检查、类型检查、测试均通过 - 为自动化部署做好准备 ## 技术细节 - 前端:修复 5+ ESLint 错误,完善类型定义 - 后端:修复 3+ go vet 错误,通过所有测试 - 管理后台:创建 ESLint 配置,修复导入问题 - 所有模块均可正常构建和运行
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import api from './api'
|
|
import { Category } from './queries'
|
|
|
|
// 分类服务 - 处理分类相关的API调用
|
|
class CategoryService {
|
|
private categoryCache: Map<number, string> = new Map()
|
|
|
|
// 获取所有分类
|
|
async getAllCategories(): Promise<Category[]> {
|
|
if (process.env.NEXT_PUBLIC_USE_REAL_API === 'true') {
|
|
const response: { categories: Category[] } = await api.get('/categories?page=1&page_size=100')
|
|
return response?.categories || []
|
|
} else {
|
|
// Mock API 返回字符串数组,需要转换
|
|
const categories: string[] = await api.get('/categories')
|
|
return categories.map((name: string, index: number) => ({
|
|
id: index + 1,
|
|
name,
|
|
description: '',
|
|
created_at: Date.now() / 1000,
|
|
updated_at: Date.now() / 1000
|
|
}))
|
|
}
|
|
}
|
|
|
|
// 根据分类ID获取分类名称
|
|
async getCategoryName(categoryId: number): Promise<string> {
|
|
if (this.categoryCache.has(categoryId)) {
|
|
return this.categoryCache.get(categoryId)!
|
|
}
|
|
|
|
try {
|
|
const categories = await this.getAllCategories()
|
|
// 缓存所有分类
|
|
categories.forEach(cat => {
|
|
this.categoryCache.set(cat.id, cat.name)
|
|
})
|
|
|
|
return this.categoryCache.get(categoryId) || 'unknown'
|
|
} catch (error) {
|
|
console.error('获取分类名称失败:', error)
|
|
return 'unknown'
|
|
}
|
|
}
|
|
|
|
// 清除缓存
|
|
clearCache() {
|
|
this.categoryCache.clear()
|
|
}
|
|
}
|
|
|
|
export const categoryService = new CategoryService() |