yumi-golang/internal/router/voice_room_red_packet_routes.go
2026-05-08 18:55:47 +08:00

165 lines
4.7 KiB
Go

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