package app import ( "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" distributionapp "github.com/break/junhong_cmp_fiber/internal/application/distributionwithdrawal" distributiondomain "github.com/break/junhong_cmp_fiber/internal/domain/distribution" "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" ) // AgentDistributionHandler 代理分销扫码注册公开 Handler。 type AgentDistributionHandler struct { service *distributionapp.RegistrationService validator *validator.Validate } // NewAgentDistributionHandler 创建代理分销扫码注册公开 Handler。 func NewAgentDistributionHandler( service *distributionapp.RegistrationService, validate *validator.Validate, ) *AgentDistributionHandler { return &AgentDistributionHandler{service: service, validator: validate} } // RegisterAgentDistribution 提交代理扫码注册 // POST /api/c/v1/agent-distribution-registrations // 无需认证、JWT、角色或权限;只创建待审批注册记录,不返回任何账号凭证。 // 无效分销码、停用上级、验证码无效或已消费统一返回“分销码不可用”且不落库。 func (h *AgentDistributionHandler) RegisterAgentDistribution(c *fiber.Ctx) error { if h.service == nil { return errors.New(errors.CodeServiceUnavailable, "代理分销注册能力尚未配置") } var req dto.CreateAgentDistributionRegistrationReq if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } if h.validator == nil { return errors.New(errors.CodeInternalError, "代理分销注册校验器未配置") } if err := h.validator.Struct(&req); err != nil { return errors.New(errors.CodeInvalidParam, "注册参数不合法") } result, err := h.service.Register(c.UserContext(), distributiondomain.RegistrationInput{ DistributionCode: req.DistributionCode, Phone: req.Phone, Username: req.Username, Password: req.Password, ShopName: req.ShopName, ShopCode: req.ShopCode, ContactName: req.ContactName, Province: req.Province, City: req.City, District: req.District, Address: req.Address, }, req.Code) if err != nil { return err } return response.Success(c, &dto.CreateAgentDistributionRegistrationResp{ ID: result.RegistrationID, Status: result.Status, StatusName: constants.GetAgentDistributionRegistrationStatusName(result.Status), }) }