yumi-golang/internal/router/vip_routes.go
2026-04-29 18:45:52 +08:00

133 lines
3.5 KiB
Go

package router
import (
"net/http"
"strconv"
"strings"
"chatapp3-golang/internal/service/vip"
"github.com/gin-gonic/gin"
)
// registerVipRoutes registers app and admin VIP APIs.
func registerVipRoutes(engine *gin.Engine, javaClient authGateway, vipService *vip.Service) {
if vipService == nil {
return
}
appGroup := engine.Group("/app/vip")
appGroup.Use(authMiddleware(javaClient))
appGroup.GET("/home", func(c *gin.Context) {
resp, err := vipService.GetHome(c.Request.Context(), mustAuthUser(c))
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
appGroup.GET("/status", func(c *gin.Context) {
resp, err := vipService.GetStatus(c.Request.Context(), mustAuthUser(c))
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
appGroup.POST("/preview", func(c *gin.Context) {
var req vip.PurchaseRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, vip.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := vipService.PreviewPurchase(c.Request.Context(), mustAuthUser(c), req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
appGroup.POST("/purchase", func(c *gin.Context) {
var req vip.PurchaseRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, vip.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := vipService.Purchase(c.Request.Context(), mustAuthUser(c), req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
appGroup.GET("/orders", func(c *gin.Context) {
cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1")))
limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20")))
resp, err := vipService.PageUserOrders(c.Request.Context(), mustAuthUser(c), cursor, limit)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
residentGroup := engine.Group("/resident-activity/vip")
residentGroup.Use(consoleAuthMiddleware(javaClient))
residentGroup.GET("/config", func(c *gin.Context) {
resp, err := vipService.GetConfig(c.Request.Context(), c.Query("sysOrigin"))
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
residentGroup.POST("/config/save", func(c *gin.Context) {
var req vip.SaveConfigRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, vip.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := vipService.SaveConfig(c.Request.Context(), req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
residentGroup.GET("/order/page", func(c *gin.Context) {
cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1")))
limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20")))
resp, err := vipService.PageOrders(
c.Request.Context(),
c.Query("sysOrigin"),
vip.ParseUserID(c.Query("userId")),
c.Query("status"),
c.Query("orderType"),
cursor,
limit,
)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
residentGroup.GET("/user-state/page", func(c *gin.Context) {
cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1")))
limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20")))
resp, err := vipService.PageUserStates(
c.Request.Context(),
c.Query("sysOrigin"),
vip.ParseUserID(c.Query("userId")),
c.Query("status"),
cursor,
limit,
)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
}