package pipeline import ( "encoding/json" "net/http" "github.com/go-chi/chi/v5" bolt "go.etcd.io/bbolt" ) type handler struct { store *Store } func NewRestHandler(db *bolt.DB) *handler { store, _ := NewStore(db) return &handler{ store: store, } } func (h *handler) GetPipeline(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") id := chi.URLParam(r, "id") p, err := h.store.Get(id) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if err := json.NewEncoder(w).Encode(p); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func (h *handler) GetAllPipelines(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") p, err := h.store.List() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if err := json.NewEncoder(w).Encode(p); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func (h *handler) SavePipeline(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") defer r.Body.Close() var req Pipeline if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } id, err := h.store.Save(req) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if err := json.NewEncoder(w).Encode(id); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func (h *handler) DeletePipeline(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") id := chi.URLParam(r, "id") err := h.store.Delete(id) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if err := json.NewEncoder(w).Encode("ok"); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }