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}) } }