修复 code review 问题:DTO 内部字段、错误消息、重复代码与测试覆盖

- 删除 ExpiryBaseOverrideSet 字段的 description 标签(json:"-" 内部字段不进文档)
- ValidateExpiryBaseOverride 两处 CodeInvalidParam 补充中文错误消息
- 提取 initPackageExpiryBaseFields 消除 toResponse/toResponseWithAllocation 中的重复初始化
- 删除 order/service.go 中"行业卡永远直接激活"过时注释
- 补充 T01 系列授权 HTTP 集成测试(Create + ManagePackages 两个入口)
- 补充 T03 C 端购买和平台代购(无分配)快照集成测试
- 补充 T04 from_purchase 默认值、卡未实名仍立即激活的自动购包测试
- 新增 testutil.NewRedisClient 供激活接续测试使用

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 10:56:46 +09:00
parent 9818537239
commit f7e0f07692
13 changed files with 931 additions and 40 deletions

View File

@@ -658,14 +658,20 @@ func (s *ActivationService) InvalidatePackagesForRefund(ctx context.Context, ass
constants.PackageUsageStatusDepleted,
}
baseQuery := s.db.WithContext(ctx).Model(&model.PackageUsage{})
switch assetType {
case "iot_card":
baseQuery = baseQuery.Where("iot_card_id = ?", assetID)
case "device":
baseQuery = baseQuery.Where("device_id = ?", assetID)
default:
return errors.New(errors.CodeInvalidParam, "无效的资产类型")
newAssetQuery := func() (*gorm.DB, error) {
query := s.db.WithContext(ctx).Model(&model.PackageUsage{})
switch assetType {
case "iot_card":
return query.Where("iot_card_id = ?", assetID), nil
case "device":
return query.Where("device_id = ?", assetID), nil
default:
return nil, errors.New(errors.CodeInvalidParam, "无效的资产类型")
}
}
baseQuery, err := newAssetQuery()
if err != nil {
return err
}
var targets []model.PackageUsage
@@ -716,7 +722,11 @@ func (s *ActivationService) InvalidatePackagesForRefund(ctx context.Context, ass
if len(mainUsageIDs) > 0 {
var addons []model.PackageUsage
if err := baseQuery.
addonQuery, queryErr := newAssetQuery()
if queryErr != nil {
return queryErr
}
if err := addonQuery.
Where("master_usage_id IN ?", mainUsageIDs).
Where("status IN ?", validStatuses).
Find(&addons).Error; err != nil {