package router import ( "chatapp3-golang/internal/service/registerreward" "encoding/json" "fmt" "net/http" "strconv" "strings" "time" "github.com/gin-gonic/gin" ) // registerRegisterRewardRoutes 注册注册奖励联调与后台路由。 func registerRegisterRewardRoutes( engine *gin.Engine, javaClient authGateway, registerRewardService *registerreward.RegisterRewardService, ) { if registerRewardService == nil { return } appGroup := engine.Group("/app/register-reward") appGroup.Use(authMiddleware(javaClient)) appGroup.GET("/status", func(c *gin.Context) { resp, err := registerRewardService.GetStatus(c.Request.Context(), mustAuthUser(c)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) appGroup.GET("/content", func(c *gin.Context) { resp, err := registerRewardService.GetContent(c.Request.Context(), mustAuthUser(c)) if err != nil { writeError(c, err) return } writeOK(c, resp) }) debugGroup := engine.Group("/debug/register-reward") debugGroup.Use(authMiddleware(javaClient)) debugGroup.GET("/notice/stream", func(c *gin.Context) { user := mustAuthUser(c) stream, cancel := registerRewardService.SubscribeDebugNotices(user.UserID) defer cancel() flusher, ok := c.Writer.(http.Flusher) if !ok { writeError(c, registerreward.NewAppError(http.StatusInternalServerError, "sse_not_supported", "streaming is not supported")) return } c.Writer.Header().Set("Content-Type", "text/event-stream") c.Writer.Header().Set("Cache-Control", "no-cache") c.Writer.Header().Set("Connection", "keep-alive") c.Writer.Header().Set("X-Accel-Buffering", "no") c.Status(http.StatusOK) fmt.Fprint(c.Writer, ": connected\n\n") flusher.Flush() heartbeat := time.NewTicker(20 * time.Second) defer heartbeat.Stop() for { select { case <-c.Request.Context().Done(): return case <-heartbeat.C: fmt.Fprint(c.Writer, ": ping\n\n") flusher.Flush() case event, ok := <-stream: if !ok { return } payload, err := json.Marshal(event) if err != nil { writeError(c, err) return } fmt.Fprintf(c.Writer, "event: register-reward\n") fmt.Fprintf(c.Writer, "data: %s\n\n", payload) flusher.Flush() } } }) residentGroup := engine.Group("/resident-activity/register-reward") residentGroup.Use(consoleAuthMiddleware(javaClient)) residentGroup.GET("/daily-record/page", func(c *gin.Context) { cursor, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("cursor", "1"))) limit, _ := strconv.Atoi(strings.TrimSpace(c.DefaultQuery("limit", "20"))) resp, err := registerRewardService.PageDailyRecords( c.Request.Context(), c.Query("sysOrigin"), c.Query("claimDate"), cursor, limit, ) if err != nil { writeError(c, err) return } writeOK(c, resp) }) }