From 7e1ac3352cac761fe4e6052a6770d8bd77cdf046 Mon Sep 17 00:00:00 2001 From: Rajamohan Raj Date: Thu, 16 Jul 2020 23:12:57 +0000 Subject: Implement GetAll projects handler In this patch implement the route: /v2/projects. Issue-ID: MULTICLOUD-1126 Signed-off-by: Rajamohan Raj Change-Id: Ia38aa560a74c26b8528d6bd579038c1b80b4d3c9 --- src/orchestrator/api/api.go | 1 + src/orchestrator/api/projecthandler.go | 25 +++++++++++++++++++++++++ src/orchestrator/api/projecthandler_test.go | 4 ++++ src/orchestrator/pkg/module/project.go | 24 ++++++++++++++++++++++++ 4 files changed, 54 insertions(+) (limited to 'src/orchestrator') diff --git a/src/orchestrator/api/api.go b/src/orchestrator/api/api.go index 5abbb96d..9194419c 100644 --- a/src/orchestrator/api/api.go +++ b/src/orchestrator/api/api.go @@ -57,6 +57,7 @@ func NewRouter(projectClient moduleLib.ProjectManager, } router.HandleFunc("/projects", projHandler.createHandler).Methods("POST") router.HandleFunc("/projects/{project-name}", projHandler.getHandler).Methods("GET") + router.HandleFunc("/projects", projHandler.getHandler).Methods("GET") router.HandleFunc("/projects/{project-name}", projHandler.deleteHandler).Methods("DELETE") //setting routes for compositeApp diff --git a/src/orchestrator/api/projecthandler.go b/src/orchestrator/api/projecthandler.go index 1e78c676..09b24096 100644 --- a/src/orchestrator/api/projecthandler.go +++ b/src/orchestrator/api/projecthandler.go @@ -75,6 +75,31 @@ func (h projectHandler) getHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) name := vars["project-name"] + // handle for get all projects + if len(name) == 0 { + var pList []moduleLib.Project + + projects, err := h.client.GetAllProjects() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + for _, p := range projects { + pList = append(pList, moduleLib.Project{MetaData: p.MetaData}) + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + err = json.NewEncoder(w).Encode(pList) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + return + + } + ret, err := h.client.GetProject(name) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/src/orchestrator/api/projecthandler_test.go b/src/orchestrator/api/projecthandler_test.go index 0212e57a..dae87e2b 100644 --- a/src/orchestrator/api/projecthandler_test.go +++ b/src/orchestrator/api/projecthandler_test.go @@ -60,6 +60,10 @@ func (m *mockProjectManager) DeleteProject(name string) error { return m.Err } +func (m *mockProjectManager) GetAllProjects() ([]moduleLib.Project, error) { + return []moduleLib.Project{}, m.Err +} + func TestProjectCreateHandler(t *testing.T) { testCases := []struct { label string diff --git a/src/orchestrator/pkg/module/project.go b/src/orchestrator/pkg/module/project.go index a6f59254..02f6d827 100644 --- a/src/orchestrator/pkg/module/project.go +++ b/src/orchestrator/pkg/module/project.go @@ -58,6 +58,7 @@ type ProjectManager interface { CreateProject(pr Project) (Project, error) GetProject(name string) (Project, error) DeleteProject(name string) error + GetAllProjects() ([]Project, error) } // ProjectClient implements the ProjectManager @@ -123,6 +124,29 @@ func (v *ProjectClient) GetProject(name string) (Project, error) { return Project{}, pkgerrors.New("Error getting Project") } +// GetAllProjects returns all the projects +func (v *ProjectClient) GetAllProjects() ([]Project, error) { + key := ProjectKey{ + ProjectName: "", + } + + var res []Project + values, err := db.DBconn.Find(v.storeName, key, v.tagMeta) + if err != nil { + + } + + for _, value := range values { + p := Project{} + err = db.DBconn.Unmarshal(value, &p) + if err != nil { + return []Project{}, pkgerrors.Wrap(err, "Unmarshaling Project") + } + res = append(res, p) + } + return res, nil +} + // DeleteProject the Project from database func (v *ProjectClient) DeleteProject(name string) error { -- cgit 1.2.3-korg