yumi-golang/internal/router/invite_routes.go
2026-04-27 19:12:00 +08:00

116 lines
3.2 KiB
Go

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)
}