package handlers import ( "context" "net/http" "github.com/go-chi/chi/v5" "github.com/orchard9/rdev/internal/sdlc" "github.com/orchard9/rdev/pkg/api" ) // GetArtifactStatus returns artifact statuses for a feature. // GET /projects/{id}/sdlc/features/{slug}/artifacts func (h *SDLCHandler) GetArtifactStatus(w http.ResponseWriter, r *http.Request) { projectID := chi.URLParam(r, "id") slug := chi.URLParam(r, "slug") ctx, cancel := context.WithTimeout(r.Context(), TimeoutStandard) defer cancel() artifacts, err := h.sdlcService.GetArtifactStatus(ctx, projectID, slug) if err != nil { writeSDLCError(w, r, err) return } api.WriteSuccess(w, r, artifacts) } // ApproveArtifact approves a feature artifact. // POST /projects/{id}/sdlc/features/{slug}/artifacts/{type}/approve func (h *SDLCHandler) ApproveArtifact(w http.ResponseWriter, r *http.Request) { projectID := chi.URLParam(r, "id") slug := chi.URLParam(r, "slug") artTypeStr := chi.URLParam(r, "type") artType := sdlc.ArtifactType(artTypeStr) if !sdlc.IsValidArtifactType(artType) { api.WriteBadRequest(w, r, "invalid artifact type: "+artTypeStr) return } ctx, cancel := context.WithTimeout(r.Context(), TimeoutHeavyWrite) defer cancel() if err := h.sdlcService.ApproveArtifact(ctx, projectID, slug, artType); err != nil { writeSDLCError(w, r, err) return } api.WriteSuccess(w, r, map[string]any{ "feature": slug, "artifact": artTypeStr, "status": "approved", }) } // RejectArtifact rejects a feature artifact. // POST /projects/{id}/sdlc/features/{slug}/artifacts/{type}/reject func (h *SDLCHandler) RejectArtifact(w http.ResponseWriter, r *http.Request) { projectID := chi.URLParam(r, "id") slug := chi.URLParam(r, "slug") artTypeStr := chi.URLParam(r, "type") artType := sdlc.ArtifactType(artTypeStr) if !sdlc.IsValidArtifactType(artType) { api.WriteBadRequest(w, r, "invalid artifact type: "+artTypeStr) return } ctx, cancel := context.WithTimeout(r.Context(), TimeoutHeavyWrite) defer cancel() if err := h.sdlcService.RejectArtifact(ctx, projectID, slug, artType); err != nil { writeSDLCError(w, r, err) return } api.WriteSuccess(w, r, map[string]any{ "feature": slug, "artifact": artTypeStr, "status": "rejected", }) }