122 lines
3.3 KiB
Go
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})
|
|
}
|
|
}
|