|
|
ffeb0417c0
|
登录权限返回修改
|
2026-01-30 17:22:38 +08:00 |
|
|
|
4856a88d41
|
docs: 新增 Gateway 集成和微信公众号支付集成的 OpenSpec 规划文档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 43s
|
2026-01-30 16:09:32 +08:00 |
|
|
|
1cf17e8f14
|
清理冗余的梯度返佣(TierCommission)配置
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m46s
- 移除 Model 层:删除 ShopSeriesCommissionTier 模型及相关字段
- 更新 DTO:删除 TierCommissionConfig、TierEntry 类型及相关请求/响应字段
- 删除 Store 层:移除 ShopSeriesCommissionTierStore 及相关查询逻辑
- 简化 Service 层:删除梯度返佣处理逻辑,统计查询移除 tier_bonus 字段
- 数据库迁移:创建 000034_remove_tier_commission 移除相关表和字段
- 更新测试:移除梯度返佣相关测试用例,更新集成测试
- OpenAPI 文档:删除梯度返佣相关 schema 和枚举值
- 归档变更:归档 remove-tier-commission-redundancy 到 archive/2026-01-30-
- 同步规范:更新 4 个主 specs,标记废弃功能并添加迁移指引
原因:梯度返佣功能与一次性梯度佣金功能重复,且从未实现实际计算逻辑
迁移:使用一次性佣金的梯度模式 (OneTimeCommissionConfig.type = "tiered") 替代
|
2026-01-30 14:57:24 +08:00 |
|
|
|
409a68d60b
|
feat: OpenAPI 契约对齐与框架优化
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
主要变更:
1. OpenAPI 文档契约对齐
- 统一错误响应字段名为 msg(非 message)
- 规范 envelope 响应结构(code, msg, data, timestamp)
- 个人客户路由纳入文档体系(使用 Register 机制)
- 新增 BuildDocHandlers() 统一管理 handler 构造
- 确保文档生成的幂等性
2. Service 层错误处理统一
- 全面替换 fmt.Errorf 为 errors.New/Wrap
- 统一错误码使用规范
- Handler 层参数校验不泄露底层细节
- 新增错误码验证集成测试
3. 代码质量提升
- 删除未使用的 Task handler 和路由
- 新增代码规范检查脚本(check-service-errors.sh)
- 新增注释路径一致性检查(check-comment-paths.sh)
- 更新 API 文档生成指南
4. OpenSpec 归档
- 归档 openapi-contract-alignment 变更(63 tasks)
- 归档 service-error-unify-core 变更
- 归档 service-error-unify-support 变更
- 归档 code-cleanup-docs-update 变更
- 归档 handler-validation-security 变更
- 同步 delta specs 到主规范文件
影响范围:
- pkg/openapi: 新增 handlers.go,优化 generator.go
- internal/service/*: 48 个 service 文件错误处理统一
- internal/handler/admin: 优化参数校验错误提示
- internal/routes: 个人客户路由改造,删除 task 路由
- scripts: 新增 3 个代码检查脚本
- docs: 更新 OpenAPI 文档(15750+ 行)
- openspec/specs: 同步 3 个主规范文件
破坏性变更:无
向后兼容:是
|
2026-01-30 11:40:36 +08:00 |
|
|
|
1290160728
|
fix: 修复订单支付幂等性问题,防止重复激活套餐
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m22s
- 使用条件更新实现支付状态原子转换(pending -> paid)
- 重复请求返回幂等成功,不再重复激活套餐
- 新增 tb_package_usage 唯一索引(order_id, package_id)
- 新增幂等性和异常状态测试,测试覆盖率 71.7%
- 归档 OpenSpec 变更 fix-order-activation-idempotency
|
2026-01-29 16:33:53 +08:00 |
|
|
|
2b0f79be81
|
归档一次性佣金配置落库与累计触发修复,同步规范文档到主 specs
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
- 归档 fix-one-time-commission-config-and-accumulation 到 archive/2026-01-29-*
- 同步 delta specs 到主规范(one-time-commission-trigger、commission-calculation)
- 新增累计触发逻辑文档和测试用例
- 修复一次性佣金配置落库和累计充值更新逻辑
|
2026-01-29 16:00:18 +08:00 |
|
|
|
d977000a66
|
feat: 归档佣金计算触发和快照变更,同步规范文档
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m40s
- 归档 OpenSpec 变更到 archive 目录
- 创建 2 个新的主规范文件:commission-trigger 和 order-commission-snapshot
- 实现订单佣金快照字段和支付自动触发
- 确保事务一致性,所有佣金操作在同一事务内完成
- 提取成本价计算为公共工具函数
|
2026-01-29 14:58:35 +08:00 |
|
|
|
c9fee7f2f6
|
fix: 修复授权记录备注修改权限问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m42s
- 实现备注权限检查逻辑(authorization_service.go)
- 添加备注权限验证存储层(authorization_store.go)
- 新增集成测试覆盖备注权限场景
- 归档 fix-authorization-remark-permission 变更
- 同步 enterprise-card-authorization spec 规范
|
2026-01-29 14:29:11 +08:00 |
|
|
|
b02175271a
|
feat: 实现企业设备授权功能并归档 OpenSpec 变更
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m39s
- 新增企业设备授权模块(Model、DTO、Service、Handler、Store)
- 实现设备授权的创建、查询、更新、删除等完整业务逻辑
- 添加企业卡授权与设备授权的关联关系
- 新增 2 个数据库迁移脚本
- 同步 OpenSpec delta specs 到 main specs
- 归档 add-enterprise-device-authorization 变更
- 更新 API 文档和路由配置
- 新增完整的集成测试和单元测试覆盖
|
2026-01-29 13:18:49 +08:00 |
|
|
|
e87513541b
|
feat: 实现一次性佣金功能
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m41s
- 新增佣金计算服务,支持一次性佣金和返佣计算
- 新增 ShopSeriesOneTimeCommissionTier 模型和存储层
- 新增两个数据库迁移:一次性佣金表和订单佣金字段
- 更新 Commission 模型,新增佣金来源和关联字段
- 更新 CommissionRecord 存储层,支持一次性佣金查询
- 更新 MyCommission 服务,集成一次性佣金计算逻辑
- 更新 ShopCommission 服务,支持一次性佣金统计
- 新增佣金计算异步任务处理器
- 更新 API 路由,新增一次性佣金相关端点
- 归档 OpenSpec 变更文档,同步规范到主规范库
|
2026-01-29 09:36:12 +08:00 |
|
|
|
dfcf16f548
|
feat: 实现订单支付功能模块
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m36s
- 新增订单管理、支付回调、购买验证等核心服务
- 实现订单、订单项目的数据存储层和 API 接口
- 添加订单数据库迁移和 DTO 定义
- 更新 API 文档和路由配置
- 同步 3 个新规范到主规范库(订单管理、订单支付、套餐购买验证)
- 完成 OpenSpec 变更归档
Ultraworked with Sisyphus
|
2026-01-28 22:12:15 +08:00 |
|
|
|
a945a4f554
|
feat: 实现卡和设备的套餐系列绑定功能
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m37s
- 添加 Device 和 IotCard 模型的 SeriesID 字段
- 实现 DeviceService 和 IotCardService 的套餐系列绑定逻辑
- 添加 DeviceStore 和 IotCardStore 的数据库操作方法
- 更新 API 接口和路由支持套餐系列绑定
- 创建数据库迁移脚本(000027_add_series_binding_fields)
- 添加完整的单元测试和集成测试
- 更新 OpenAPI 文档
- 归档 OpenSpec 变更文档
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
|
2026-01-28 19:49:45 +08:00 |
|
|
|
1da680a790
|
重构: 店铺套餐分配系统从加价模式改为返佣模式
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m18s
主要变更:
- 重构分配模型:从加价模式(pricing_mode/pricing_value)改为返佣模式(base_commission + tier_commission)
- 删除独立的 my_package 接口,统一到 /api/admin/packages(通过数据权限自动过滤)
- 新增批量分配和批量调价功能,支持事务和性能优化
- 新增配置版本管理,订单创建时锁定返佣配置
- 新增成本价历史记录,支持审计和纠纷处理
- 新增统计缓存系统(Redis + 异步任务),优化梯度返佣计算性能
- 删除冗余的梯度佣金独立 CRUD 接口(合并到分配配置中)
- 归档 3 个已完成的 OpenSpec changes 并同步 8 个新 capabilities 到 main specs
技术细节:
- 数据库迁移:000026_refactor_shop_package_allocation
- 新增 Store:AllocationConfigStore, PriceHistoryStore, CommissionStatsStore
- 新增 Service:BatchAllocationService, BatchPricingService, CommissionStatsService
- 新增异步任务:统计更新、定时同步、周期归档
- 测试覆盖:批量操作集成测试、梯度佣金 CRUD 清理验证
影响:
- API 变更:删除 4 个梯度 CRUD 接口(POST/GET/PUT/DELETE /:id/tiers)
- API 新增:批量分配、批量调价接口
- 数据模型:重构 shop_series_allocation 表结构
- 性能优化:批量操作使用 CreateInBatches,统计使用 Redis 缓存
相关文档:
- openspec/changes/archive/2026-01-28-refactor-shop-package-allocation/
- openspec/specs/agent-available-packages/
- openspec/specs/allocation-config-versioning/
- 等 8 个新 capability specs
|
2026-01-28 17:11:55 +08:00 |
|
|
|
23eb0307bb
|
feat: 实现门店套餐分配功能并统一测试基础设施
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m30s
新增功能:
- 门店套餐分配管理(shop_package_allocation):支持门店套餐库存管理
- 门店套餐系列分配管理(shop_series_allocation):支持套餐系列分配和佣金层级设置
- 我的套餐查询(my_package):支持门店查询自己的套餐分配情况
测试改进:
- 统一集成测试基础设施,新增 testutils.NewIntegrationTestEnv
- 重构所有集成测试使用新的测试环境设置
- 移除旧的测试辅助函数和冗余测试文件
- 新增 test_helpers_test.go 统一任务测试辅助
技术细节:
- 新增数据库迁移 000025_create_shop_allocation_tables
- 新增 3 个 Handler、Service、Store 和对应的单元测试
- 更新 OpenAPI 文档和文档生成器
- 测试覆盖率:Service 层 > 90%
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-28 10:45:16 +08:00 |
|
|
|
5fefe9d0cb
|
重构: 使用 testutils.NewIntegrationTestEnv 替换旧的测试环境设置
- 移除 setupAuthorizationTestEnv 和 teardown 函数
- 移除所有 DELETE 清理代码,改用事务隔离
- 每个测试函数改用 env := testutils.NewIntegrationTestEnv(t)
- 使用 env.TX 替代 env.db
- 使用 env.AsSuperAdmin().Request() 和 env.AsUser() 发送请求
- 使用 env.CreateTestShop/Enterprise/Account 创建测试数据
- 移除未使用的导入(bytes, net/http/httptest)
- 保持所有测试业务逻辑不变
|
2026-01-27 22:44:21 +08:00 |
|
|
|
79c061b6fa
|
feat: 实现套餐管理模块,包含套餐系列、双状态管理、废弃模型清理
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m24s
- 新增套餐系列管理 (CRUD + 状态切换)
- 新增套餐管理 (CRUD + 启用/禁用 + 上架/下架双状态)
- 清理 8 个废弃分佣模型及对应数据库表
- Package 模型新增建议成本价、建议售价、上架状态字段
- 完整的 Store/Service/Handler 三层实现
- 包含单元测试和集成测试
- 归档 add-package-module change
- 新增多个 OpenSpec changes (订单支付、店铺套餐分配、一次性分佣、卡设备系列绑定)
|
2026-01-27 19:55:47 +08:00 |
|
|
|
30a0717316
|
补充 PackageService 的 Update 和 Delete 测试
- 添加 TestPackageService_Update:更新成功、更新不存在的套餐
- 添加 TestPackageService_Delete:删除成功、删除不存在的套餐
- 测试覆盖率从 47.2% 提升到 66.9%
|
2026-01-27 19:38:05 +08:00 |
|
|
|
e2e6a64ba4
|
创建 PackageService 单元测试(覆盖双状态逻辑)
- 创建 internal/service/package/service_test.go 文件
- 测试 Create 方法:创建成功、编码重复失败、系列不存在失败
- 测试 UpdateStatus 方法:禁用时自动强制下架、启用时保持原上架状态
- 测试 UpdateShelfStatus 方法:启用状态可上架、禁用状态不能上架、下架成功
- 测试 Get 方法:获取成功、不存在返回错误
- 测试 List 方法:列表查询、按类型过滤、按状态过滤
- 使用 testutils.NewTestTransaction 创建测试事务
- 使用 middleware.SetUserContext 设置用户上下文
- 使用唯一的 PackageCode(基于时间戳)
- 重点覆盖双状态逻辑的测试
|
2026-01-27 19:37:08 +08:00 |
|
|
|
d104d297ca
|
feat: 实现运营商模块重构,添加冗余字段优化查询性能
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m16s
主要变更:
- 新增 Carrier CRUD API(创建、列表、详情、更新、删除、状态更新)
- IotCard/IotCardImportTask 添加 carrier_type/carrier_name 冗余字段
- 移除 Carrier 表的 channel_name/channel_code 字段
- 查询时直接使用冗余字段,避免 JOIN Carrier 表
- 添加数据库迁移脚本(000021-000023)
- 添加单元测试和集成测试
- 同步更新 OpenAPI 文档和 specs
|
2026-01-27 12:18:19 +08:00 |
|
|
|
5a179ba16b
|
更新openspec
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m48s
|
2026-01-27 10:03:49 +08:00 |
|
|
|
477a9fc98d
|
feat: 添加设备IMEI和单卡ICCID查询接口
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
- 新增 GET /api/admin/devices/by-imei/:imei 接口,支持通过设备号查询设备详情
- 新增 GET /api/admin/iot-cards/by-iccid/:iccid 接口,支持通过ICCID查询单卡详情
- 添加对应的 Service 层方法和 Handler
- 更新 OpenAPI 文档
- 添加集成测试并修复测试环境配置(使用环境变量)
- 归档已完成的 OpenSpec 变更记录
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-27 09:59:54 +08:00 |
|
|
|
ce0783f96e
|
feat: 实现设备管理和设备导入功能,修复测试问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m30s
主要变更:
- 实现设备管理模块(创建、查询、列表、更新状态、删除)
- 实现设备批量导入功能(CSV 解析、ICCID 绑定、异步任务处理)
- 添加设备-SIM 卡绑定约束(部分唯一索引防止并发问题)
- 修复 fee_rate 数据库字段类型(numeric -> bigint)
- 修复测试数据隔离问题(基于增量断言)
- 修复集成测试中间件顺序问题
- 清理无用测试文件(PersonalCustomer、Email 相关)
- 归档 enterprise-card-authorization 变更
|
2026-01-26 18:05:12 +08:00 |
|
|
|
fdcff33058
|
feat: 实现企业卡授权和授权记录管理功能
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m9s
主要功能:
- 添加企业卡授权/回收接口 (POST /enterprises/:id/allocate-cards, recall-cards)
- 添加授权记录管理接口 (GET/PUT /authorizations)
- 实现代理用户数据权限过滤(只能查看自己店铺下企业的授权记录)
- 添加 GORM callback 支持授权记录表的数据权限过滤
技术改进:
- 原生 SQL 查询手动添加数据权限过滤(ListWithJoin, GetByIDWithJoin)
- 移除卡授权预检接口(allocate-cards/preview),保留内部方法
- 完善单元测试和集成测试覆盖
|
2026-01-26 15:07:03 +08:00 |
|
|
|
45aa7deb87
|
feat: 添加环境变量管理工具和部署配置改版
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m33s
主要改动:
- 新增交互式环境配置脚本 (scripts/setup-env.sh)
- 新增本地启动快捷脚本 (scripts/run-local.sh)
- 新增环境变量模板文件 (.env.example)
- 部署模式改版:使用嵌入式配置 + 环境变量覆盖
- 添加对象存储功能支持
- 改进 IoT 卡片导入任务
- 优化 OpenAPI 文档生成
- 删除旧的配置文件,改用嵌入式默认配置
|
2026-01-26 10:28:29 +08:00 |
|
|
|
194078674a
|
feat: 实现单卡资产分配与回收功能
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m45s
- 新增单卡分配/回收 API(支持 ICCID 列表、号段范围、筛选条件三种选卡方式)
- 新增资产分配记录查询 API(支持多条件筛选和分页)
- 新增 AssetAllocationRecord 模型、Store、Service、Handler 完整实现
- 扩展 IotCardStore 新增批量更新、号段查询、筛选查询等方法
- 修复 GORM Callback 处理 slice 类型(BatchCreate)的问题
- 新增完整的单元测试和集成测试
- 同步 OpenSpec 规范并归档 change
|
2026-01-24 15:46:15 +08:00 |
|
|
|
a924e63e68
|
feat: 实现物联网卡独立管理和批量导入功能
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m42s
新增物联网卡独立管理模块,支持单卡查询、批量导入和状态管理。主要变更包括:
功能特性:
- 新增物联网卡 CRUD 接口(查询、分页列表、删除)
- 支持 CSV/Excel 批量导入物联网卡
- 实现异步导入任务处理和进度跟踪
- 新增 ICCID 号码格式校验器(支持 Luhn 算法)
- 新增 CSV 文件解析工具(支持编码检测和错误处理)
数据库变更:
- 移除 iot_card 和 device 表的 owner_id/owner_type 字段
- 新增 iot_card_import_task 导入任务表
- 为导入任务添加运营商类型字段
测试覆盖:
- 新增 IoT 卡 Store 层单元测试
- 新增 IoT 卡导入任务单元测试
- 新增 IoT 卡集成测试(包含导入流程测试)
- 新增 CSV 工具和 ICCID 校验器测试
文档更新:
- 更新 OpenAPI 文档(新增 7 个 IoT 卡接口)
- 归档 OpenSpec 变更提案
- 更新 API 文档规范和生成器指南
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-01-24 11:03:43 +08:00 |
|
|
|
6821e5abcf
|
refactor: 统一错误消息数据源,优化错误码与映射表管理
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m36s
主要改动:
- 改造 errors.New() 和 Wrap() 函数签名为可变参数,优先使用 errorMessages 映射表
- 添加 allErrorCodes 注册表和 init() 启动时校验,确保错误码与映射表一致
- 添加 TestAllCodesHaveMessages 和 TestNoOrphanMessages 测试防止映射表腐化
- 清理 109 处与映射表一致的冗余硬编码(service 层)
- 保留业务特定消息覆盖能力
新增 API 用法:
- errors.New(errors.CodeUnauthorized) // 使用映射表默认消息
- errors.New(errors.CodeNotFound, "提现申请不存在") // 覆盖为自定义消息
|
2026-01-22 18:27:42 +08:00 |
|
|
|
b68e7ec013
|
优化测试数据库连接管理
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 15s
- 创建全局单例连接池,性能提升 6-7 倍
- 实现 NewTestTransaction/GetTestRedis/CleanTestRedisKeys
- 移除旧的 SetupTestDB/TeardownTestDB API
- 迁移所有测试文件到新方案(47 个文件)
- 添加测试连接管理规范文档
- 更新 AGENTS.md 和 README.md
性能对比:
- 旧方案:~71 秒(204 测试)
- 新方案:~10.5 秒(首次初始化 + 后续复用)
- 内存占用降低约 80%
- 网络连接数从 204 降至 1
|
2026-01-22 14:38:43 +08:00 |
|
|
|
46e4e5f4f1
|
refactor: 将 DTO 文件从 internal/model 移动到 internal/model/dto 目录
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m22s
- 移动 17 个 DTO 文件到 internal/model/dto/ 目录
- 更新所有 DTO 文件的 package 声明从 model 改为 dto
- 更新所有引用文件的 import 和类型引用
- Handler 层:admin 和 h5 所有处理器
- Service 层:所有业务服务
- Routes 层:所有路由定义
- Tests 层:单元测试和集成测试
- 清理未使用的 import 语句
- 验证:项目构建成功,测试编译通过,LSP 无错误
|
2026-01-22 10:15:04 +08:00 |
|
|
|
23be0a7d3e
|
fix: 修复 OpenAPI 路径参数 path 标签缺失导致启动 panic 的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m17s
- 为 enterprise_card_authorization_dto.go 中的 DTO 添加 path 标签
- 为 customer_account_dto.go 中的 DTO 添加 path 标签并重构结构
- 为 enterprise_dto.go 中的 DTO 添加 path 标签并重构结构
- 更新 handler 和 service 层使用正确的请求体类型
|
2026-01-21 18:42:29 +08:00 |
|
|
|
8677a54370
|
fix: 修复 OpenAPI 文档生成器缺少新增 Handler 的问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 3m41s
新增以下 Handler 到文档生成器:
- ShopCommission(代理商佣金管理)
- CommissionWithdrawal(佣金提现审批)
- CommissionWithdrawalSetting(提现配置管理)
- Enterprise(企业客户管理)
- EnterpriseCard(企业卡授权)
- CustomerAccount(客户账号管理)
- MyCommission(我的佣金)
同时修复 .gitignore 中 api 规则过宽的问题
|
2026-01-21 18:26:10 +08:00 |
|
|
|
91c9bbfeb8
|
feat: 实现账号与佣金管理模块
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m35s
新增功能:
- 店铺佣金查询:店铺佣金统计、店铺佣金记录列表、店铺提现记录
- 佣金提现审批:提现申请列表、审批通过、审批拒绝
- 提现配置管理:配置列表、新增配置、获取当前生效配置
- 企业管理:企业列表、创建、更新、删除、获取详情
- 企业卡授权:授权列表、批量授权、批量取消授权、统计
- 客户账号管理:账号列表、创建、更新状态、重置密码
- 我的佣金:佣金统计、佣金记录、提现申请、提现记录
数据库变更:
- 扩展 tb_commission_withdrawal_request 新增提现单号等字段
- 扩展 tb_account 新增 is_primary 字段
- 扩展 tb_commission_record 新增 shop_id、balance_after
- 扩展 tb_commission_withdrawal_setting 新增每日提现次数限制
- 扩展 tb_iot_card、tb_device 新增 shop_id 冗余字段
- 新建 tb_enterprise_card_authorization 企业卡授权表
- 新建 tb_asset_allocation_record 资产分配记录表
- 数据迁移:owner_type 枚举值 agent 统一为 shop
测试:
- 新增 7 个单元测试文件覆盖各服务
- 修复集成测试 Redis 依赖问题
|
2026-01-21 18:20:44 +08:00 |
|
|
|
1489abe668
|
修复上次错误的提交
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m20s
|
2026-01-21 14:51:08 +08:00 |
|
|
|
3b1fd91709
|
全局软删除
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m21s
|
2026-01-21 14:37:02 +08:00 |
|
|
|
2291f7740d
|
修改不正确的配置
|
2026-01-21 14:24:58 +08:00 |
|
|
|
6f1350b527
|
修复日志中间件的 UserID 类型转换 panic 问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m31s
问题描述:
- 认证中间件存储的 UserID 是 uint 类型
- 日志中间件和错误上下文错误地将其断言为 string 类型
- 导致所有认证请求在记录访问日志时发生 panic
修复内容:
1. pkg/logger/middleware.go
- 修改 UserID 变量类型从 string 为 uint
- 使用安全的类型断言 (uid.(uint))
- 使用 zap.Uint 记录日志
2. pkg/errors/context.go
- 修改 UserID 类型断言从 string 为 uint
- 使用 strconv.FormatUint 转换为 string 用于错误上下文
影响范围:
- 修复所有需要认证的接口的 panic 错误
- 包括 /api/admin/shops, /api/admin/me, /api/admin/permissions 等
|
2026-01-21 12:17:19 +08:00 |
|
|
|
9795bb9ace
|
重构规范文档:提取详细规范为 6 个 Skills 实现模块化和按需加载
- 新增 6 个 Skill 文件:api-routing, db-migration, db-validation, doc-management, dto-standards, model-standards
- 简化 AGENTS.md 和 CLAUDE.md,保留核心规范,详细内容移至 Skills
- 添加 Skills 触发表格,说明各规范的加载时机
- 优化规范文档结构,提升可维护性和可读性
|
2026-01-21 11:19:13 +08:00 |
|
|
|
cfac546f14
|
完善开发规范:新增 PostgreSQL MCP 数据库验证规范
- 在 AGENTS.md 中添加「数据库验证规范」章节
- 强制要求 AI 在测试接口时使用 PostgreSQL MCP 验证数据正确性
- 提供 4 个可用工具说明和 3 个典型验证场景示例
- 在 README.md 中添加规范文档链接,便于快速查阅
|
2026-01-21 11:00:14 +08:00 |
|
|
|
573ef28237
|
完善 API 文档生成规范:统一路由注册和 OpenAPI 文档自动生成
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m32s
主要改进:
1. 新增 docs/api-documentation-guide.md 详细文档指南
2. 在 AGENTS.md 中添加路由注册规范章节
3. 更新 README.md 文档目录结构
路由注册改进:
- 统一使用 Register() 函数注册路由并自动生成文档
- 所有接口必须指定 RouteSpec(Summary, Tags, Input, Output, Auth)
- 修复 docs.go 和 gendocs/main.go 使用 RegisterRoutesWithDoc 统一注册
DTO 规范更新:
- shop_dto.go 和 shop_account_dto.go 补充完整的 description 标签
- 所有枚举字段必须列出可能值和中文说明
文档生成优化:
- admin-openapi.yaml 自动生成更新
- 健康检查和任务管理接口加入文档
- H5 认证接口完整文档化
规范文档管理:
- 添加规范文档管理流程说明
- 详细文档放在 docs/ 目录
- AGENTS.md 只保留核心规则和引导链接
|
2026-01-21 10:20:52 +08:00 |
|
|
|
291c3d1b09
|
修复数据库时区问题:在 DSN 连接字符串中添加 TimeZone=Asia/Shanghai 参数
问题描述:
- PostgreSQL 数据库时区设置为 UTC
- 应用代码使用本地时区(Asia/Shanghai, UTC+8)
- 导致数据库存储的时间戳相差 8 小时
解决方案:
- 在 pkg/database/postgres.go 的 DSN 构建中添加 TimeZone=Asia/Shanghai
- PostgreSQL 驱动会自动处理时区转换(应用时区 ↔ UTC)
- 与测试代码保持一致(测试中已使用该参数)
影响范围:
- 新写入的时间戳将正确转换为 UTC 存储
- 从数据库读取的时间自动转换为应用时区
- 需要重启服务使配置生效
|
2026-01-21 10:20:25 +08:00 |
|
|
|
4abbf558e4
|
完善 DTO 规范:统一 description 标签并添加 AI 助手自动检查指引
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m28s
- 修复所有 DTO 文件的 description 标签(10 个文件)
- 枚举字段统一使用中文说明(用户类型、角色类型、权限类型等)
- 状态字段明确说明 0/1 含义
- validate 标签与 OpenAPI 标签保持一致
- 在 AGENTS.md 和 CLAUDE.md 添加 DTO 规范章节
- AI 助手必须执行的 7 项检查清单
- 常见枚举字段标准值参考
- 确保未来 AI 助手自动遵循规范
- 创建规范文档
- docs/code-review-checklist.md(Code Review 检查清单)
- docs/dto-improvement-summary.md(DTO 改进总结)
- docs/ai-dto-guidelines-update.md(AI 指引更新说明)
- 重新生成 OpenAPI 文档(375 个 description 标签)
影响:所有 API 字段现在都有清晰的中文说明,前端开发更友好
|
2026-01-20 15:10:11 +08:00 |
|
|
|
1bee64fc65
|
修复 CI/CD 部署逻辑:强制更新 docker-compose.prod.yml
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m0s
根本问题:
- 第一次部署时复制的 docker-compose.prod.yml 没有环境变量
- 后续部署跳过复制,导致服务器一直使用旧版本配置
- 容器启动时因缺少 DB_HOST 环境变量立即退出
- 健康检查失败 → 容器 unhealthy
服务器日志证实:
- 容器反复重启
- 每次都显示 '错误: DB_HOST 环境变量未设置'
- entrypoint-api.sh 第10行检查失败后 exit 1
修复内容:
- docker-compose.prod.yml 每次部署强制更新
- configs 目录保留现有配置(避免覆盖运行时调整)
- 确保最新的环境变量配置生效
|
2026-01-20 11:57:25 +08:00 |
|
|
|
a80dc1e69d
|
修复容器健康检查失败的核心问题:IPv6 vs IPv4 和权限
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 3m47s
问题诊断(本地运行镜像验证):
1. 服务实际已启动在 3000 端口
2. 从宿主机访问健康检查 ✅ 成功
3. 容器内部 wget localhost:3000 ❌ 失败 (Connection refused)
4. 健康检查尝试连接 [::1]:3000 (IPv6),但 Fiber 只监听 IPv4
根本原因:
- wget localhost 优先解析为 IPv6 地址 [::1]
- Fiber 默认监听 0.0.0.0:3000 (仅 IPv4)
- Docker 健康检查失败 → 容器标记 unhealthy → Worker 无法启动
修复内容:
1. Dockerfile.api 健康检查: localhost → 127.0.0.1 (强制 IPv4)
2. docker-compose.prod.yml 健康检查: 同步修改
3. Dockerfile.api: 创建 logs 目录并设置 appuser 权限
4. cmd/api/main.go: OpenAPI 文档路径改为 logs/openapi.yaml
|
2026-01-20 11:50:28 +08:00 |
|
|
|
286defb063
|
修复 API 容器健康检查失败:统一端口配置并添加数据库环境变量
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 3m23s
问题1: 端口不一致
- Dockerfile.api 中 EXPOSE 和健康检查使用 8088
- config.yaml 中 API 实际监听 3000
- 健康检查失败导致容器 unhealthy
问题2: 缺少数据库环境变量
- entrypoint-api.sh 需要 DB_HOST、DB_USER 等环境变量执行迁移
- docker-compose.prod.yml 没有定义这些变量
- 容器启动脚本立即退出
修复:
- Dockerfile.api: EXPOSE 和健康检查改为 3000
- docker-compose.prod.yml: 添加完整的数据库环境变量
|
2026-01-20 11:33:26 +08:00 |
|
|
|
bf4ef37cc5
|
修复 docker compose 找不到配置文件:显式指定文件名
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 4s
问题:docker compose 默认查找 docker-compose.yml
我们的文件:docker-compose.prod.yml
解决:所有 docker compose 命令添加 -f 参数
- docker compose -f docker-compose.prod.yml pull
- docker compose -f docker-compose.prod.yml up -d
- docker compose -f docker-compose.prod.yml ps
|
2026-01-20 11:29:54 +08:00 |
|
|
|
1d773c4f69
|
添加部署调试信息:排查配置文件复制问题
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 3s
添加调试输出:
- 显示当前工作目录(pwd)
- 列出当前目录内容(ls -la)
- 复制时显示详细信息(-v 参数)
- 显示配置已存在的情况
帮助定位为什么 docker-compose.prod.yml 找不到
|
2026-01-20 11:22:17 +08:00 |
|
|
|
4f29107fc4
|
修复 SSL 证书验证错误:跳过内网自签名证书验证
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 4m20s
问题:git clone 失败,SSL certificate OpenSSL verify result
原因:Gitea 使用自签名证书,git 无法验证
解决:设置 GIT_SSL_NO_VERIFY=1 跳过 SSL 验证
注意:这仅适用于内网环境,生产环境应使用正确的证书
|
2026-01-20 11:13:48 +08:00 |
|
|
|
a44f6779c2
|
修复 git 命令找不到:添加 Nix 路径到 PATH
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 0s
问题:Runner 在 host 模式下 PATH 不包含 ~/.nix-profile/bin
解决:在检出代码前添加 Nix 路径到 PATH
这样 git 命令就能被找到(安装在 ~/.nix-profile/bin/git)
|
2026-01-20 11:12:11 +08:00 |
|
|
|
d78f45b04f
|
触发构建:宿主机已安装 git,验证完整部署流程
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 0s
|
2026-01-20 11:10:07 +08:00 |
|
|
|
ffcef53c46
|
触发构建:验证 Runner host 模式和完整部署流程
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 0s
|
2026-01-20 10:52:12 +08:00 |
|