111 lines
2.8 KiB
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)
|
|
})
|
|
}
|