修复 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:
@@ -625,16 +625,13 @@ func (s *Service) toResponse(ctx context.Context, pkg *model.Package) *dto.Packa
|
||||
CalendarType: pkg.CalendarType,
|
||||
DurationDays: durationDays,
|
||||
DataResetCycle: pkg.DataResetCycle,
|
||||
ExpiryBase: pkg.ExpiryBase,
|
||||
DefaultExpiryBase: pkg.ExpiryBase,
|
||||
DefaultExpiryBaseName: ExpiryBaseName(pkg.ExpiryBase),
|
||||
EffectiveExpiryBase: pkg.ExpiryBase,
|
||||
EffectiveExpiryBaseName: ExpiryBaseName(pkg.ExpiryBase),
|
||||
Status: pkg.Status,
|
||||
ShelfStatus: pkg.ShelfStatus,
|
||||
CreatedAt: pkg.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: pkg.UpdatedAt.Format(time.RFC3339),
|
||||
ExpiryBase: pkg.ExpiryBase,
|
||||
Status: pkg.Status,
|
||||
ShelfStatus: pkg.ShelfStatus,
|
||||
CreatedAt: pkg.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: pkg.UpdatedAt.Format(time.RFC3339),
|
||||
}
|
||||
initPackageExpiryBaseFields(resp, pkg)
|
||||
|
||||
userType := middleware.GetUserTypeFromContext(ctx)
|
||||
shopID := middleware.GetShopIDFromContext(ctx)
|
||||
@@ -707,16 +704,13 @@ func (s *Service) toResponseWithAllocation(_ context.Context, pkg *model.Package
|
||||
CalendarType: pkg.CalendarType,
|
||||
DurationDays: durationDays,
|
||||
DataResetCycle: pkg.DataResetCycle,
|
||||
ExpiryBase: pkg.ExpiryBase,
|
||||
DefaultExpiryBase: pkg.ExpiryBase,
|
||||
DefaultExpiryBaseName: ExpiryBaseName(pkg.ExpiryBase),
|
||||
EffectiveExpiryBase: pkg.ExpiryBase,
|
||||
EffectiveExpiryBaseName: ExpiryBaseName(pkg.ExpiryBase),
|
||||
Status: pkg.Status,
|
||||
ShelfStatus: pkg.ShelfStatus,
|
||||
CreatedAt: pkg.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: pkg.UpdatedAt.Format(time.RFC3339),
|
||||
ExpiryBase: pkg.ExpiryBase,
|
||||
Status: pkg.Status,
|
||||
ShelfStatus: pkg.ShelfStatus,
|
||||
CreatedAt: pkg.CreatedAt.Format(time.RFC3339),
|
||||
UpdatedAt: pkg.UpdatedAt.Format(time.RFC3339),
|
||||
}
|
||||
initPackageExpiryBaseFields(resp, pkg)
|
||||
|
||||
if allocationMap != nil {
|
||||
if allocation, ok := allocationMap[pkg.ID]; ok {
|
||||
@@ -744,6 +738,14 @@ func (s *Service) toResponseWithAllocation(_ context.Context, pkg *model.Package
|
||||
return resp
|
||||
}
|
||||
|
||||
// initPackageExpiryBaseFields 初始化响应中生效条件默认字段(无分配覆盖时跟随套餐默认)。
|
||||
func initPackageExpiryBaseFields(resp *dto.PackageResponse, pkg *model.Package) {
|
||||
resp.DefaultExpiryBase = pkg.ExpiryBase
|
||||
resp.DefaultExpiryBaseName = ExpiryBaseName(pkg.ExpiryBase)
|
||||
resp.EffectiveExpiryBase = pkg.ExpiryBase
|
||||
resp.EffectiveExpiryBaseName = ExpiryBaseName(pkg.ExpiryBase)
|
||||
}
|
||||
|
||||
func applyAllocationExpiryBase(resp *dto.PackageResponse, pkg *model.Package, allocation *model.ShopPackageAllocation) {
|
||||
resp.ExpiryBaseOverride = allocation.ExpiryBaseOverride
|
||||
resp.ExpiryBaseOverrideName = ExpiryBaseOverrideName(allocation.ExpiryBaseOverride)
|
||||
|
||||
Reference in New Issue
Block a user