Files
ai-workflow/inbox/internal/httpapi/task_exec.go
T

58 lines
1.5 KiB
Go

package httpapi
import (
"database/sql"
"net/http"
taskexecapp "inbox/internal/app/taskexec"
"inbox/internal/base/httpx"
"inbox/internal/domain/workflow"
)
func (h *Handler) runtimeNextTaskExecution(w http.ResponseWriter, r *http.Request) {
type request struct {
RunnerID string `json:"runner_id"`
}
var req request
if err := httpx.DecodeJSON(r, &req); err != nil {
httpx.WriteError(w, http.StatusBadRequest, err.Error())
return
}
item, err := h.TaskExec.ClaimNext(r.Context(), r.PathValue("laneID"), req.RunnerID)
if err != nil {
if err == sql.ErrNoRows {
w.WriteHeader(http.StatusNoContent)
return
}
writeStoreError(w, err)
return
}
httpx.WriteJSON(w, http.StatusOK, map[string]any{"assignment": item})
}
func (h *Handler) runtimeTaskExecutionComplete(w http.ResponseWriter, r *http.Request) {
type request struct {
Status string `json:"status"`
ExitCode int `json:"exit_code"`
ResultMarkdown string `json:"result_markdown"`
ErrorMessage string `json:"error_message"`
}
var req request
if err := httpx.DecodeJSON(r, &req); err != nil {
httpx.WriteError(w, http.StatusBadRequest, err.Error())
return
}
item, err := h.TaskExec.Complete(r.Context(), taskexecapp.Completion{
RunID: r.PathValue("runID"),
Status: workflow.RunStatus(req.Status),
ExitCode: req.ExitCode,
ResultMarkdown: req.ResultMarkdown,
ErrorMessage: req.ErrorMessage,
})
if err != nil {
writeStoreError(w, err)
return
}
httpx.WriteJSON(w, http.StatusOK, item)
}