package router import ( "net/http" "strconv" "strings" "chatapp3-golang/internal/service/voiceroomredpacket" "github.com/gin-gonic/gin" ) // registerVoiceRoomRedPacketRoutes 注册语音房红包 App 和后台接口。 func registerVoiceRoomRedPacketRoutes( engine *gin.Engine, javaClient authGateway, service *voiceroomredpacket.Service, ) { if service == nil { return } appGroup := engine.Group("/app/voice-room/red-packet") 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.POST("/presence/heartbeat", func(c *gin.Context) { var req voiceroomredpacket.PresenceRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomredpacket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.Heartbeat(c.Request.Context(), mustAuthUser(c), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.POST("/presence/leave", func(c *gin.Context) { var req voiceroomredpacket.PresenceRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomredpacket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.Leave(c.Request.Context(), mustAuthUser(c), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.POST("/send", func(c *gin.Context) { var req voiceroomredpacket.SendRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomredpacket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.Send(c.Request.Context(), mustAuthUser(c), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.POST("/claim", func(c *gin.Context) { var req voiceroomredpacket.ClaimRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomredpacket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } resp, err := service.Claim(c.Request.Context(), mustAuthUser(c), req) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/detail", func(c *gin.Context) { resp, err := service.Detail(c.Request.Context(), mustAuthUser(c), c.Query("packetNo")) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/claim-records", func(c *gin.Context) { resp, err := service.ListClaimRecords(c.Request.Context(), mustAuthUser(c), c.Query("packetNo")) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/sent-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.PageSentRecords(c.Request.Context(), mustAuthUser(c), cursor, limit) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup := engine.Group("/resident-activity/voice-room-red-packet") 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 voiceroomredpacket.SaveConfigRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomredpacket.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("/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.PageAdminRecords( c.Request.Context(), c.Query("sysOrigin"), c.Query("status"), voiceroomredpacket.ParseUserID(c.Query("userId")), cursor, limit, ) if err != nil { writeError(c, err) return } writeOK(c, resp) }) adminGroup.POST("/refund/retry", func(c *gin.Context) { var req voiceroomredpacket.ClaimRequest if err := c.ShouldBindJSON(&req); err != nil { writeError(c, voiceroomredpacket.NewAppError(http.StatusBadRequest, "bad_request", err.Error())) return } if err := service.RetryRefund(c.Request.Context(), req.PacketNo); err != nil { writeError(c, err) return } writeOK(c, gin.H{"success": true}) }) }