package admin import ( "strconv" "github.com/gofiber/fiber/v2" merchantpayment "github.com/break/junhong_cmp_fiber/internal/application/merchantpayment" "github.com/break/junhong_cmp_fiber/internal/model/dto" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/response" ) // PaymentMerchantHandler 处理特权商户与商户池配置请求。 type PaymentMerchantHandler struct { service *merchantpayment.ManagementService } // NewPaymentMerchantHandler 创建商户池管理处理器。 func NewPaymentMerchantHandler(service *merchantpayment.ManagementService) *PaymentMerchantHandler { return &PaymentMerchantHandler{service: service} } func pathID(c *fiber.Ctx) (uint, error) { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil || id == 0 { return 0, errors.New(errors.CodeInvalidParam, "无效的路径ID") } return uint(id), nil } // CreateMerchant 创建支付商户。 // POST /api/admin/payment-merchants func (h *PaymentMerchantHandler) CreateMerchant(c *fiber.Ctx) error { var r dto.PaymentMerchantRequest if err := c.BodyParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, err := h.service.CreateMerchant(c.UserContext(), r) if err != nil { return err } return response.Success(c, v) } // ListMerchants 分页查询支付商户。 // GET /api/admin/payment-merchants func (h *PaymentMerchantHandler) ListMerchants(c *fiber.Ctx) error { var r dto.PaymentMerchantListRequest if err := c.QueryParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, n, err := h.service.ListMerchants(c.UserContext(), r) if err != nil { return err } return response.SuccessWithPagination(c, v, n, r.Page, r.PageSize) } // GetMerchant 查询支付商户详情。 // GET /api/admin/payment-merchants/:id func (h *PaymentMerchantHandler) GetMerchant(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } v, err := h.service.GetMerchant(c.UserContext(), id) if err != nil { return err } return response.Success(c, v) } // UpdateMerchant 更新支付商户。 // PUT /api/admin/payment-merchants/:id func (h *PaymentMerchantHandler) UpdateMerchant(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } var r dto.PaymentMerchantUpdateRequest if err := c.BodyParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, err := h.service.UpdateMerchant(c.UserContext(), id, r) if err != nil { return err } return response.Success(c, v) } // DeleteMerchant 删除支付商户。 // DELETE /api/admin/payment-merchants/:id func (h *PaymentMerchantHandler) DeleteMerchant(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } var r dto.PaymentMerchantDeleteRequest if err := c.BodyParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if err := h.service.DeleteMerchant(c.UserContext(), id, r.Confirm); err != nil { return err } return response.Success(c, nil) } // CreatePool 创建商户池。 // POST /api/admin/payment-merchant-pools func (h *PaymentMerchantHandler) CreatePool(c *fiber.Ctx) error { var r dto.PaymentMerchantPoolRequest if err := c.BodyParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, err := h.service.SavePool(c.UserContext(), 0, r) if err != nil { return err } return response.Success(c, v) } // UpdatePool 更新商户池。 // PUT /api/admin/payment-merchant-pools/:id func (h *PaymentMerchantHandler) UpdatePool(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } var r dto.PaymentMerchantPoolRequest if err := c.BodyParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, err := h.service.SavePool(c.UserContext(), id, r) if err != nil { return err } return response.Success(c, v) } // EnablePool 启用商户池。 // POST /api/admin/payment-merchant-pools/:id/enable func (h *PaymentMerchantHandler) EnablePool(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } result, err := h.service.SetPoolEnabled(c.UserContext(), id, true) if err != nil { return err } return response.Success(c, result) } // DisablePool 停用商户池。 // POST /api/admin/payment-merchant-pools/:id/disable func (h *PaymentMerchantHandler) DisablePool(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } result, err := h.service.SetPoolEnabled(c.UserContext(), id, false) if err != nil { return err } return response.Success(c, result) } // GetAuthorization 获取微信授权配置。 // GET /api/admin/wechat-authorizations func (h *PaymentMerchantHandler) GetAuthorization(c *fiber.Ctx) error { v, err := h.service.GetAuthorization(c.UserContext()) if err != nil { return err } return response.Success(c, v) } // ListPools 分页查询商户池。 // GET /api/admin/payment-merchant-pools func (h *PaymentMerchantHandler) ListPools(c *fiber.Ctx) error { var r dto.PaymentMerchantPoolListRequest if err := c.QueryParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, total, err := h.service.ListPools(c.UserContext(), r) if err != nil { return err } return response.SuccessWithPagination(c, v, total, r.Page, r.PageSize) } // GetPool 查询商户池详情。 // GET /api/admin/payment-merchant-pools/:id func (h *PaymentMerchantHandler) GetPool(c *fiber.Ctx) error { id, err := pathID(c) if err != nil { return err } v, err := h.service.GetPool(c.UserContext(), id) if err != nil { return err } return response.Success(c, v) } // SaveAuthorization 保存微信授权配置。 // PUT /api/admin/wechat-authorizations/current func (h *PaymentMerchantHandler) SaveAuthorization(c *fiber.Ctx) error { var r dto.WechatAuthorizationRequest if err := c.BodyParser(&r); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } v, err := h.service.SaveAuthorization(c.UserContext(), r) if err != nil { return err } return response.Success(c, v) }