Files
byre/internal/server/workflows.go
T

101 lines
2.4 KiB
Go

package server
import (
"fmt"
"io"
"net/http"
"g.fc.run/ai/byre/internal/api"
)
const maxWorkflowBytes = 1 << 20
func (s *Server) ListWorkflows(w http.ResponseWriter, r *http.Request) {
workflows, err := s.store.ListWorkflows(r.Context())
if err != nil {
writeStoreError(w, err)
return
}
writeJSON(w, http.StatusOK, workflows)
}
func (s *Server) GetWorkflow(w http.ResponseWriter, r *http.Request, name string) {
def, err := s.store.GetWorkflow(r.Context(), name)
if err != nil {
writeStoreError(w, err)
return
}
writeJSON(w, http.StatusOK, def)
}
func (s *Server) PutWorkflow(w http.ResponseWriter, r *http.Request, name string, params api.PutWorkflowParams) {
body, err := io.ReadAll(http.MaxBytesReader(w, r.Body, maxWorkflowBytes))
if err != nil {
writeError(w, http.StatusBadRequest, fmt.Errorf("read workflow: %w", err))
return
}
from := ""
if params.From != nil {
from = *params.From
}
summary, err := s.agents.SaveWorkflow(r.Context(), name, from, body, actor(r))
if err != nil {
writeAgentError(w, err)
return
}
writeJSON(w, http.StatusOK, summary)
}
func (s *Server) SetReviewWorkflow(w http.ResponseWriter, r *http.Request, projectID string) {
req := api.ProjectWorkflow{}
if !readJSON(w, r, &req) {
return
}
p, err := s.agents.SetReviewWorkflow(r.Context(), projectID, req.Workflow, actor(r))
if err != nil {
writeAgentError(w, err)
return
}
writeJSON(w, http.StatusOK, p)
}
func (s *Server) SetAuditWorkflow(w http.ResponseWriter, r *http.Request, projectID string) {
req := api.ProjectWorkflow{}
if !readJSON(w, r, &req) {
return
}
p, err := s.agents.SetAuditWorkflow(r.Context(), projectID, req.Workflow, actor(r))
if err != nil {
writeAgentError(w, err)
return
}
writeJSON(w, http.StatusOK, p)
}
func (s *Server) DeleteWorkflow(w http.ResponseWriter, r *http.Request, name string) {
err := s.store.DeleteWorkflow(r.Context(), name, actor(r))
if err != nil {
writeStoreError(w, err)
return
}
w.WriteHeader(http.StatusNoContent)
}
func (s *Server) GetTaskWorkflow(w http.ResponseWriter, r *http.Request, taskID string) {
tw, err := s.agents.TaskWorkflow(r.Context(), taskID)
if err != nil {
writeStoreError(w, err)
return
}
writeJSON(w, http.StatusOK, tw)
}
func (s *Server) GetWorkflowRun(w http.ResponseWriter, r *http.Request, taskID string) {
run, err := s.agents.WorkflowRun(r.Context(), taskID)
if err != nil {
writeAgentError(w, err)
return
}
writeJSON(w, http.StatusOK, run)
}