yumi-golang/internal/router/register_reward_routes.go

111 lines
2.8 KiB
Go

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