Implement GetAll projects handler 01/110301/1
authorRajamohan Raj <rajamohan.raj@intel.com>
Thu, 16 Jul 2020 23:12:57 +0000 (23:12 +0000)
committerRajamohan Raj <rajamohan.raj@intel.com>
Thu, 16 Jul 2020 23:15:29 +0000 (23:15 +0000)
In this patch implement the route: /v2/projects.

Issue-ID: MULTICLOUD-1126
Signed-off-by: Rajamohan Raj <rajamohan.raj@intel.com>
Change-Id: Ia38aa560a74c26b8528d6bd579038c1b80b4d3c9

src/orchestrator/api/api.go
src/orchestrator/api/projecthandler.go
src/orchestrator/api/projecthandler_test.go
src/orchestrator/pkg/module/project.go

index 5abbb96..9194419 100644 (file)
@@ -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
index 1e78c67..09b2409 100644 (file)
@@ -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)
index 0212e57..dae87e2 100644 (file)
@@ -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
index a6f5925..02f6d82 100644 (file)
@@ -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 {