package admin import ( "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" assetAutoRenewalApp "github.com/break/junhong_cmp_fiber/internal/application/assetautorenewal" "github.com/break/junhong_cmp_fiber/internal/handler/validation" "github.com/break/junhong_cmp_fiber/internal/model/dto" "github.com/break/junhong_cmp_fiber/pkg/constants" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/response" ) // AssetAutoRenewalConfigHandler 资产钱包自动续费配置 Handler。 // // 路由组已有「仅超级管理员与平台账号」门禁,应用层仍会复核账号类型(ENG-AUTHZ-001), // 因此代理、企业与个人客户即使绕过路由也无任何入口。 type AssetAutoRenewalConfigHandler struct { service *assetAutoRenewalApp.Service validator *validator.Validate } // NewAssetAutoRenewalConfigHandler 创建资产钱包自动续费配置 Handler。 func NewAssetAutoRenewalConfigHandler(service *assetAutoRenewalApp.Service, validator *validator.Validate) *AssetAutoRenewalConfigHandler { return &AssetAutoRenewalConfigHandler{service: service, validator: validator} } // GetConfig 读取资产钱包自动续费配置。 // GET /api/admin/asset-auto-renewal-config func (h *AssetAutoRenewalConfigHandler) GetConfig(c *fiber.Ctx) error { config, err := h.service.GetConfig(c.UserContext()) if err != nil { return err } return response.Success(c, toAssetAutoRenewalConfigResponse(config)) } // UpdateConfig 保存资产钱包自动续费配置。 // PUT /api/admin/asset-auto-renewal-config func (h *AssetAutoRenewalConfigHandler) UpdateConfig(c *fiber.Ctx) error { var req dto.UpdateAssetAutoRenewalConfigRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数格式不正确") } if err := h.validator.Struct(&req); err != nil { return errors.New(errors.CodeInvalidParam, validation.Message("保存自动续费配置参数不合法", &req, err)) } config, err := h.service.SaveConfig(c.UserContext(), assetAutoRenewalApp.ConfigRequest{ Enabled: req.Enabled, Scope: req.Scope, PackageIDs: req.PackageIDs, DaysBeforeExpiry: req.DaysBeforeExpiry, }) if err != nil { return err } return response.Success(c, toAssetAutoRenewalConfigResponse(config)) } // toAssetAutoRenewalConfigResponse 组装配置响应,枚举附加中文名称字段(ENG-DTO-001)。 func toAssetAutoRenewalConfigResponse(config *assetAutoRenewalApp.ConfigView) dto.AssetAutoRenewalConfigResponse { packageIDs := config.PackageIDs if packageIDs == nil { packageIDs = []uint{} } enabledName := "关闭" if config.Enabled == constants.AssetAutoRenewalConfigEnabledOn { enabledName = "开启" } return dto.AssetAutoRenewalConfigResponse{ Enabled: config.Enabled, Scope: config.Scope, PackageIDs: packageIDs, DaysBeforeExpiry: config.DaysBeforeExpiry, ConfigVersion: config.ConfigVersion, ScopeName: constants.GetAssetAutoRenewalScopeName(config.Scope), EnabledName: enabledName, Updater: config.Updater, UpdatedAt: config.UpdatedAt.Format("2006-01-02 15:04:05"), } }