package handler import ( "sort" "strconv" "affiliate_dash/internal/middleware" "affiliate_dash/internal/pkg/response" "affiliate_dash/internal/service" "github.com/gin-gonic/gin" ) // MerchantHandler 提供商户后台与平台管理员的多租户管理能力。 type MerchantHandler struct { merchantSvc *service.MerchantService fulfillmentSvc *service.FulfillmentService callbackSvc *service.CallbackService deliverySvc *service.DeliveryService rechargeSvc *service.RechargeService } func NewMerchantHandler(merchantSvc *service.MerchantService, fulfillmentSvc *service.FulfillmentService, callbackSvc *service.CallbackService, deliverySvc *service.DeliveryService, rechargeSvc *service.RechargeService) *MerchantHandler { return &MerchantHandler{ merchantSvc: merchantSvc, fulfillmentSvc: fulfillmentSvc, callbackSvc: callbackSvc, deliverySvc: deliverySvc, rechargeSvc: rechargeSvc, } } func (h *MerchantHandler) Current(c *gin.Context) { merchant, err := h.merchantSvc.GetMerchant(middleware.GetMerchantID(c)) if err != nil { response.NotFound(c, err.Error()) return } response.OK(c, gin.H{ "merchant": merchant, "role": middleware.GetMerchantRole(c), "permissions": mapKeys(middleware.GetMerchantPermissions(c)), }) } func mapKeys(values map[string]struct{}) []string { keys := make([]string, 0, len(values)) for key := range values { keys = append(keys, key) } sort.Strings(keys) return keys } func pageParams(c *gin.Context) (int, int) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) size, _ := strconv.Atoi(c.DefaultQuery("size", "20")) return page, size }