82 lines
2.7 KiB
Go
82 lines
2.7 KiB
Go
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)
|
||
})
|
||
}
|