yumi-golang/internal/router/region_im_group_routes.go
2026-05-25 21:02:28 +08:00

126 lines
4.0 KiB
Go

package router
import (
"net/http"
"chatapp3-golang/internal/config"
"chatapp3-golang/internal/service/highwin"
"chatapp3-golang/internal/service/regionimgroup"
"github.com/gin-gonic/gin"
)
// registerRegionIMGroupRoutes 注册区域通用 IM 群组和区域广播接口。
func registerRegionIMGroupRoutes(
engine *gin.Engine,
cfg config.Config,
javaClient authGateway,
service *regionimgroup.Service,
) {
if service == nil {
return
}
registerRegionIMGroupAppRoutes(engine, javaClient, service)
registerRegionIMGroupInternalRoutes(engine, cfg, service)
registerRegionIMGroupAdminRoutes(engine, javaClient, service)
}
func registerRegionIMGroupAppRoutes(engine *gin.Engine, javaClient authGateway, service *regionimgroup.Service) {
handler := func(c *gin.Context) {
resp, err := service.GetCurrentRegionIMGroup(c.Request.Context(), mustAuthUser(c))
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
}
appGroup := engine.Group("/app/region-im-group")
appGroup.Use(authMiddleware(javaClient))
appGroup.GET("/current", handler)
legacyGroup := engine.Group("/app/voice-room/red-packet")
legacyGroup.Use(authMiddleware(javaClient))
legacyGroup.GET("/im-group", handler)
}
func registerRegionIMGroupInternalRoutes(engine *gin.Engine, cfg config.Config, service *regionimgroup.Service) {
internalGroup := engine.Group("/internal/voice-room")
internalGroup.Use(internalSecretMiddleware(cfg.HTTP.InternalCallbackSecret))
internalGroup.POST("/region-broadcast", func(c *gin.Context) {
var req regionimgroup.RegionBroadcastRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, regionimgroup.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := service.SendRegionBroadcast(c.Request.Context(), req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
}
func registerRegionIMGroupAdminRoutes(engine *gin.Engine, javaClient authGateway, service *regionimgroup.Service) {
registerRegionIMGroupAdminGroup(engine.Group("/region/config"), javaClient, service)
registerRegionIMGroupAdminGroup(engine.Group("/resident-activity/voice-room-red-packet"), javaClient, service)
registerRegionBroadcastSimulationAdminGroup(engine.Group("/operate/region-broadcast"), javaClient, service)
}
func registerRegionIMGroupAdminGroup(group *gin.RouterGroup, javaClient authGateway, service *regionimgroup.Service) {
group.Use(consoleAuthMiddleware(javaClient))
group.GET("/im-groups", func(c *gin.Context) {
resp, err := service.ListRegionIMGroups(c.Request.Context(), c.Query("sysOrigin"))
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
group.POST("/im-groups/save", func(c *gin.Context) {
var req regionimgroup.RegionIMGroupRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, regionimgroup.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := service.SaveRegionIMGroup(c.Request.Context(), req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
group.POST("/im-groups/create", func(c *gin.Context) {
var req regionimgroup.RegionIMGroupRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, regionimgroup.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := service.CreateRegionIMGroup(c.Request.Context(), req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
}
func registerRegionBroadcastSimulationAdminGroup(group *gin.RouterGroup, javaClient authGateway, service *regionimgroup.Service) {
group.Use(consoleAuthMiddleware(javaClient))
group.POST("/simulate", func(c *gin.Context) {
var req highwin.BroadcastSimulationRequest
if err := c.ShouldBindJSON(&req); err != nil {
writeError(c, regionimgroup.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
resp, err := highwin.SendSimulationBroadcast(c.Request.Context(), service, req)
if err != nil {
writeError(c, err)
return
}
writeOK(c, resp)
})
}