package router import ( "errors" "io" "net/http" "strconv" "chatapp3-golang/internal/service/invite" "github.com/gin-gonic/gin" ) // registerInviteRoutes 注册邀请活动相关路由。 func registerInviteRoutes(engine *gin.Engine, javaClient authGateway, inviteService *invite.InviteService) { if inviteService == nil { return } engine.GET("/public/h5/invite-campaign/landing", func(c *gin.Context) { resp, err := inviteService.GetLanding(c.Request.Context(), c.Query("code")) if err != nil { writeError(c, err) return } writeOK(c, resp) }) internalGroup := engine.Group("/internal/invite-campaign") internalGroup.POST("/recharge-success", func(c *gin.Context) { var req invite.RechargeSuccessRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, invite.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := inviteService.HandleRechargeSuccess(c.Request.Context(), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) internalGroup.POST("/register-bind-code", func(c *gin.Context) { var req invite.RegisterBindCodeRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, invite.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := inviteService.BindRegisteredCode(c.Request.Context(), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup := engine.Group("/app/h5/invite-campaign") appGroup.Use(authMiddleware(javaClient)) appGroup.GET("/home", func(c *gin.Context) { resp, err := inviteService.GetHome(c.Request.Context(), mustAuthUser(c)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/rank", func(c *gin.Context) { limit, _ := strconv.Atoi(c.Query("limit")) resp, err := inviteService.GetRank(c.Request.Context(), mustAuthUser(c), limit) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.POST("/bind-code", func(c *gin.Context) { bindInviteCode(c, inviteService) }) appGroup.POST("/bind-invite-code", func(c *gin.Context) { bindInviteCode(c, inviteService) }) appGroup.POST("/tasks/claim", func(c *gin.Context) { var req invite.TaskClaimRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, invite.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := inviteService.ClaimTask(c.Request.Context(), mustAuthUser(c), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) } func bindInviteCode(c *gin.Context, inviteService *invite.InviteService) { var req invite.BindCodeRequest if err := c.ShouldBind(&req); err != nil && !errors.Is(err, io.EOF) { writeError(c, invite.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } if req.NormalizedInviteCode() == "" { req.InviteCodeSnake = c.Query("invite_code") req.InviteCode = c.Query("inviteCode") req.InvitationCode = c.Query("invitationCode") req.InvitationCodeSnake = c.Query("invitation_code") } resp, err := inviteService.BindCode(c.Request.Context(), mustAuthUser(c), resolveClientIP(c), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }