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