Files
geo/server/internal/ops/transport/scheduler_handler.go
T

122 lines
3.3 KiB
Go

package transport
import (
"errors"
"io"
"strconv"
"strings"
"github.com/gin-gonic/gin"
"github.com/geo-platform/tenant-api/internal/ops/app"
"github.com/geo-platform/tenant-api/internal/shared/response"
)
func listSchedulerJobsHandler(svc *app.SchedulerService) gin.HandlerFunc {
return func(c *gin.Context) {
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
size, _ := strconv.Atoi(c.DefaultQuery("size", "50"))
var enabled *bool
if raw := strings.TrimSpace(c.Query("enabled")); raw != "" {
value, err := strconv.ParseBool(raw)
if err != nil {
response.Error(c, response.ErrBadRequest(40087, "invalid_enabled", "enabled 必须是布尔值"))
return
}
enabled = &value
}
result, err := svc.ListJobs(c.Request.Context(), app.SchedulerJobListInput{
Category: strings.TrimSpace(c.Query("category")),
Keyword: strings.TrimSpace(c.Query("keyword")),
Enabled: enabled,
Page: page,
Size: size,
})
if err != nil {
response.Error(c, err)
return
}
response.Success(c, result)
}
}
func getSchedulerJobHandler(svc *app.SchedulerService) gin.HandlerFunc {
return func(c *gin.Context) {
item, err := svc.GetJob(c.Request.Context(), c.Param("key"))
if err != nil {
response.Error(c, err)
return
}
response.Success(c, item)
}
}
func updateSchedulerJobHandler(svc *app.SchedulerService) gin.HandlerFunc {
return func(c *gin.Context) {
var req app.SchedulerJobUpdateInput
if err := c.ShouldBindJSON(&req); err != nil {
response.Error(c, response.ErrBadRequest(40088, "invalid_payload", err.Error()))
return
}
item, err := svc.UpdateJob(c.Request.Context(), actorFromGin(c), c.Param("key"), req)
if err != nil {
response.Error(c, err)
return
}
response.Success(c, item)
}
}
func enableSchedulerJobHandler(svc *app.SchedulerService, enabled bool) gin.HandlerFunc {
return func(c *gin.Context) {
item, err := svc.SetEnabled(c.Request.Context(), actorFromGin(c), c.Param("key"), enabled)
if err != nil {
response.Error(c, err)
return
}
response.Success(c, item)
}
}
func triggerSchedulerJobHandler(svc *app.SchedulerService, triggerType string) gin.HandlerFunc {
return func(c *gin.Context) {
var req app.SchedulerTriggerInput
if c.Request.Body != nil {
if err := c.ShouldBindJSON(&req); err != nil && !errors.Is(err, io.EOF) {
response.Error(c, response.ErrBadRequest(40089, "invalid_payload", err.Error()))
return
}
}
item, err := svc.Trigger(c.Request.Context(), actorFromGin(c), c.Param("key"), triggerType, req)
if err != nil {
response.Error(c, err)
return
}
response.Success(c, item)
}
}
func listSchedulerRunsHandler(svc *app.SchedulerService) gin.HandlerFunc {
return func(c *gin.Context) {
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
size, _ := strconv.Atoi(c.DefaultQuery("size", "50"))
result, err := svc.ListRuns(c.Request.Context(), c.Param("key"), strings.TrimSpace(c.Query("status")), page, size)
if err != nil {
response.Error(c, err)
return
}
response.Success(c, result)
}
}
func listSchedulerInstancesHandler(svc *app.SchedulerService) gin.HandlerFunc {
return func(c *gin.Context) {
items, err := svc.ListInstances(c.Request.Context())
if err != nil {
response.Error(c, err)
return
}
response.Success(c, gin.H{"items": items})
}
}