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