yumi-golang/internal/router/task_center_archive_gc_routes.go
2026-07-18 18:56:15 +08:00

82 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package router
import (
"net/http"
"chatapp3-golang/internal/config"
"chatapp3-golang/internal/service/taskcenter"
"github.com/gin-gonic/gin"
)
const taskCenterArchiveGCManagePermission = "resident-activity:task-center-archive-gc:manage"
const taskCenterArchiveGCMenuAlias = "ResidentTaskCenterArchiveGC"
// registerTaskCenterArchiveGCRoutes 只做管理命令/cron tick 的 HTTP 绑定;所有状态机、
// 租约、COS 校验和删除边界均由 taskcenter service 实现。
func registerTaskCenterArchiveGCRoutes(engine *gin.Engine, cfg config.Config, javaClient authGateway, service *taskcenter.Service) {
if service == nil {
return
}
admin := engine.Group("/resident-activity/task-center/archive-gc")
admin.Use(consoleAuthMiddleware(javaClient))
admin.GET("/status", consoleMenuMiddleware(javaClient, taskCenterArchiveGCMenuAlias), func(c *gin.Context) {
response, err := service.ArchiveGCStatus(c.Request.Context())
if err != nil {
writeError(c, err)
return
}
writeOK(c, response)
})
admin.POST("/dry-run", consolePermissionMiddleware(javaClient, taskCenterArchiveGCManagePermission), func(c *gin.Context) {
var request taskcenter.ArchiveGCDryRunRequest
if err := c.ShouldBindJSON(&request); err != nil {
writeError(c, taskcenter.NewAppError(http.StatusBadRequest, "bad_request", err.Error()))
return
}
response, err := service.ArchiveGCDryRun(c.Request.Context(), request)
if err != nil {
writeError(c, err)
return
}
writeOK(c, response)
})
admin.POST("/start", consolePermissionMiddleware(javaClient, taskCenterArchiveGCManagePermission), func(c *gin.Context) {
response, err := service.StartArchiveGC(c.Request.Context())
if err != nil {
writeError(c, err)
return
}
writeOK(c, response)
})
admin.POST("/pause", consolePermissionMiddleware(javaClient, taskCenterArchiveGCManagePermission), func(c *gin.Context) {
response, err := service.PauseArchiveGC(c.Request.Context())
if err != nil {
writeError(c, err)
return
}
writeOK(c, response)
})
admin.POST("/resume", consolePermissionMiddleware(javaClient, taskCenterArchiveGCManagePermission), func(c *gin.Context) {
response, err := service.ResumeArchiveGC(c.Request.Context())
if err != nil {
writeError(c, err)
return
}
writeOK(c, response)
})
internal := engine.Group("/internal/task-center/archive-gc")
// tick 会最终删除生产数据,密钥缺失也必须 fail-closed不能沿用历史空密钥兼容。
internal.Use(requiredInternalSecretMiddleware(cfg.HTTP.InternalCallbackSecret))
internal.POST("/tick", func(c *gin.Context) {
response, err := service.ArchiveGCTick(c.Request.Context())
if err != nil {
writeError(c, err)
return
}
writeOK(c, response)
})
}