yangjianbo
|
3d617de577
|
refactor(数据库): 迁移持久层到 Ent 并清理 GORM
将仓储层/基础设施改为 Ent + 原生 SQL 执行路径,并移除 AutoMigrate 与 GORM 依赖。
重构内容包括:
- 仓储层改用 Ent/SQL(含 usage_log/account 等复杂查询),统一错误映射
- 基础设施与 setup 初始化切换为 Ent + SQL migrations
- 集成测试与 fixtures 迁移到 Ent 事务模型
- 清理遗留 GORM 模型/依赖,补充迁移与文档说明
- 增加根目录 Makefile 便于前后端编译
测试:
- go test -tags unit ./...
- go test -tags integration ./...
|
2025-12-29 10:03:27 +08:00 |
|
yangjianbo
|
fd51ff6970
|
fix: 代码的核心问题是判错条件用错了层级:
- apiKeyService.GetByKey(...) 返回的“找不到 API key”在这个项目里通常会被翻译成业务错误(比如
service.ErrApiKeyNotFound 这类 ApplicationError),而不是直接把 gorm.ErrRecordNotFound 透传到中
间件层。
- 因此你在中间件里用 errors.Is(err, gorm.ErrRecordNotFound) 去判断“无效 key”,很容易匹配不到(尤其
是:后面加 Redis 缓存、换存储实现、或测试里用 stub repo 时,根本不会出现 gorm 的错误)。
- 匹配不到时就会走到 500 Failed to validate API key,导致无效 API key 被错误地当成服务端故障返回
500(应该是 401)。
修复思路:中间件不要依赖 gorm 的错误,改成判断业务层错误,例如:
if errors.Is(err, service.ErrApiKeyNotFound) {
abortWithGoogleError(c, 401, "Invalid API key")
return
}
如果你把 GetByKey 的“not found”统一封装成业务错误,这样才不会被底层实现(gorm/redis/mock)影响。
|
2025-12-28 14:34:05 +08:00 |
|
yangjianbo
|
a8c173f043
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2025-12-27 23:09:11 +08:00 |
|
yangjianbo
|
97ab649d16
|
fix(仪表盘): 修复最近用量查询日期参数格式
问题:仪表盘“最近用量”调用 /usage 时传入完整 ISO 时间戳(含时分秒/时区),后端 start_date/end_date 仅接受 YYYY-MM-DD,导致请求参数校验失败,页面无法正常展示最近用量。
解决:
- loadRecentUsage 改为传入 YYYY-MM-DD(从 toISOString() 取日期部分),与后端参数格式约定保持一致
- 补充注释说明:后端会将 end_date 扩展到当日结束时间,以及 toISOString() 为 UTC 可能带来的统计口径差异
- 同步修正 usageAPI.getByDateRange 的参数注释,避免后续误用
验证:npm -C frontend run build
|
2025-12-27 23:08:38 +08:00 |
|
yangjianbo
|
530f6ad81c
|
feat: 增加caddy 安全配置示例
|
2025-12-27 21:31:06 +08:00 |
|
yangjianbo
|
3252c378aa
|
feat 增加 caddy 示例安全反向代理
|
2025-12-27 21:30:14 +08:00 |
|
yangjianbo
|
3a8dbf5a99
|
feat:
golang 1.24-> 1.25
node 20 -> node 24
具体提升请查看官方文档
|
2025-12-27 10:57:53 +08:00 |
|