package packagesilence import ( "time" packagedomain "github.com/break/junhong_cmp_fiber/internal/domain/package" "github.com/break/junhong_cmp_fiber/internal/model" "github.com/break/junhong_cmp_fiber/internal/model/dto" "github.com/break/junhong_cmp_fiber/pkg/constants" ) // BuildView 构造套餐记录的沉默期展示信息;不适用沉默期时返回 nil。 // 待实名但已过截止、还没被扫描到的记录直接显示"沉默期已过期"(技术方案 §5.4)。 // 调用方只在总开关打开时调用。 func BuildView(usage *model.PackageUsage, now time.Time) *dto.PackageSilenceView { if usage == nil || usage.SilenceStatus == nil || *usage.SilenceStatus == "" { return nil } status := *usage.SilenceStatus effectiveExpired := usage.Status == constants.PackageUsageStatusPending && packagedomain.IsSilenceEffectivelyExpired(status, usage.SilenceDeadlineAt, usage.SilenceAdjustPending, now) if effectiveExpired { status = constants.SilenceStatusExpired } return &dto.PackageSilenceView{ SilenceStatus: status, SilenceStatusName: constants.SilenceStatusName(status, usage.SilenceExtendedDays > 0), SilenceStartAt: usage.SilenceStartAt, SilencePeriodDays: usage.SilencePeriodDays, SilenceDeadlineAt: usage.SilenceDeadlineAt, SilenceExtendedDays: usage.SilenceExtendedDays, SilencePaidExtendedDays: usage.SilencePaidExtendedDays, SilenceExtensionCount: usage.SilenceExtensionCount, SilenceFreeExtensionUsed: usage.SilenceFreeExtensionUsed, SilenceExpiredAt: usage.SilenceExpiredAt, SilenceAdjustPending: usage.SilenceAdjustPending, Extendable: effectiveExpired, } }