package router import ( "net/http" "strconv" "strings" "chatapp3-golang/internal/config" "chatapp3-golang/internal/service/voiceroomrocket" "github.com/gin-gonic/gin" ) // registerVoiceRoomRocketRoutes 注册语音房火箭 App、后台和内部调试接口。 func registerVoiceRoomRocketRoutes( engine *gin.Engine, cfg config.Config, javaClient authGateway, service *voiceroomrocket.Service, ) { if service == nil { return } appGroup := engine.Group("/app/voice-room/rocket") appGroup.Use(authMiddleware(javaClient)) appGroup.GET("/config", func(c *gin.Context) { resp, err := service.GetConfig(c.Request.Context(), mustAuthUser(c)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/level-contents", func(c *gin.Context) { resp, err := service.GetLevelContents(c.Request.Context(), mustAuthUser(c)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/status", func(c *gin.Context) { resp, err := service.GetStatus(c.Request.Context(), mustAuthUser(c), parseInt64(c.Query("roomId"))) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/king", func(c *gin.Context) { cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1"))) limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "100"))) level, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("level", "1"))) roundNo, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("roundNo", "0"))) resp, err := service.GetKingRanking(c.Request.Context(), mustAuthUser(c), parseInt64(c.Query("roomId")), level, roundNo, cursor, limit) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/reward-popups", func(c *gin.Context) { resp, err := service.ListRewardPopups(c.Request.Context(), mustAuthUser(c), parseInt64(c.Query("roomId"))) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.POST("/reward-popups/ack", func(c *gin.Context) { var req voiceroomrocket.AckRewardPopupsRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomrocket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } if err := service.AckRewardPopups(c.Request.Context(), mustAuthUser(c), req); err != nil { writeError(c, err) return } writeOK(c, gin.H{"success": true}) }) appGroup.GET("/reward-records", func(c *gin.Context) { cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1"))) limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20"))) resp, err := service.PageRewardRecords(c.Request.Context(), mustAuthUser(c), parseInt64(c.Query("roomId")), cursor, limit) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/rule", func(c *gin.Context) { resp, err := service.GetRule(c.Request.Context(), mustAuthUser(c)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup := engine.Group("/resident-activity/voice-room-rocket") adminGroup.Use(consoleAuthMiddleware(javaClient)) adminGroup.GET("/config", func(c *gin.Context) { resp, err := service.GetAdminConfig(c.Request.Context(), c.Query("sysOrigin")) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.POST("/config/save", func(c *gin.Context) { var req voiceroomrocket.SaveConfigRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomrocket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.SaveAdminConfig(c.Request.Context(), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.GET("/level-configs", func(c *gin.Context) { resp, err := service.ListLevelConfigs(c.Request.Context(), c.Query("sysOrigin")) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.POST("/level-configs/save", func(c *gin.Context) { var req voiceroomrocket.SaveLevelConfigsRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomrocket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.SaveLevelConfigs(c.Request.Context(), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.GET("/reward-configs", func(c *gin.Context) { level, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("level", "0"))) resp, err := service.ListRewardConfigs(c.Request.Context(), c.Query("sysOrigin"), level) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.POST("/reward-configs/save", func(c *gin.Context) { var req voiceroomrocket.SaveRewardConfigsRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomrocket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.SaveRewardConfigs(c.Request.Context(), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.GET("/launch-records", func(c *gin.Context) { cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1"))) limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20"))) resp, err := service.PageAdminLaunchRecords(c.Request.Context(), c.Query("sysOrigin"), parseInt64(c.Query("roomId")), cursor, limit) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.GET("/reward-records", func(c *gin.Context) { cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1"))) limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20"))) resp, err := service.PageAdminRewardRecords( c.Request.Context(), c.Query("sysOrigin"), parseInt64(c.Query("roomId")), parseInt64(c.Query("userId")), c.Query("grantStatus"), cursor, limit, ) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.POST("/reward-records/retry", func(c *gin.Context) { var req struct { ID int64 `json:"id,string"` } if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomrocket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } if err := service.RetryReward(c.Request.Context(), req.ID); err != nil { writeError(c, err) return } writeOK(c, gin.H{"success": true}) }) internalGroup := engine.Group("/internal/voice-room/rocket") internalGroup.Use(internalSecretMiddleware(cfg.HTTP.InternalCallbackSecret)) internalGroup.POST("/gift-event", func(c *gin.Context) { body, err := c.GetRawData() if err != nil { writeError(c, voiceroomrocket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.ProcessGiftPayload(c.Request.Context(), string(body)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) } func parseInt64(value string) int64 { parsed, _ := strconv.ParseInt(strings.TrimSpace(value), 10, 64) return parsed }