Added getAllApps functionality in App api 59/103659/2
authorSrivahni Chivukula <srivahni.chivukula@intel.com>
Thu, 12 Mar 2020 22:50:42 +0000 (15:50 -0700)
committerSrivahni Chivukula <srivahni.chivukula@intel.com>
Thu, 12 Mar 2020 22:59:21 +0000 (15:59 -0700)
Issue-ID: MULTICLOUD-994
Signed-off-by: Srivahni Chivukula <srivahni.chivukula@intel.com>
Change-Id: I459504c45b9bedea0e6bc15ca57e7876d5f59d28

src/orchestrator/api/api.go
src/orchestrator/api/apphandler.go
src/orchestrator/pkg/module/app.go

index 70b40d9..a261319 100644 (file)
@@ -84,6 +84,7 @@ func NewRouter(projectClient moduleLib.ProjectManager,
 
        router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{version}/apps", appHandler.createAppHandler).Methods("POST")
        router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{version}/apps/{app-name}", appHandler.getAppHandler).Methods("GET")
+       router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{version}/apps", appHandler.getAppHandler).Methods("GET")
        router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{version}/apps/{app-name}", appHandler.deleteAppHandler).Methods("DELETE")
 
        if compositeProfileClient == nil {
index 3cd2dbc..06341e7 100644 (file)
@@ -129,6 +129,30 @@ func (h appHandler) getAppHandler(w http.ResponseWriter, r *http.Request) {
        compositeAppVersion := vars["version"]
        name := vars["app-name"]
 
+       // handle the get all apps case - return a list of only the json parts
+       if len(name) == 0 {
+               var retList []moduleLib.App
+
+               ret, err := h.client.GetApps(projectName, compositeAppName, compositeAppVersion)
+               if err != nil {
+                       http.Error(w, err.Error(), http.StatusInternalServerError)
+                       return
+               }
+
+               for _, app := range ret {
+                       retList = append(retList, moduleLib.App{Metadata: app.Metadata})
+               }
+
+               w.Header().Set("Content-Type", "application/json")
+               w.WriteHeader(http.StatusOK)
+               err = json.NewEncoder(w).Encode(retList)
+               if err != nil {
+                       http.Error(w, err.Error(), http.StatusInternalServerError)
+                       return
+               }
+               return
+       }
+
        accepted, _, err := mime.ParseMediaType(r.Header.Get("Accept"))
        if err != nil {
                http.Error(w, err.Error(), http.StatusNotAcceptable)
index c25a1b5..1e1a597 100644 (file)
@@ -65,6 +65,7 @@ type AppManager interface {
        CreateApp(a App, ac AppContent, p string, cN string, cV string) (App, error)
        GetApp(name string, p string, cN string, cV string) (App, error)
        GetAppContent(name string, p string, cN string, cV string) (AppContent, error)
+       GetApps(p string, cN string, cV string) ([]App, error)
        DeleteApp(name string, p string, cN string, cV string) error
 }
 
@@ -183,6 +184,34 @@ func (v *AppClient) GetAppContent(name string, p string, cN string, cV string) (
        return AppContent{}, pkgerrors.New("Error getting app content")
 }
 
+// GetApps returns all Apps for given composite App
+func (v *AppClient) GetApps(project, compositeApp, compositeAppVersion string) ([]App, error) {
+
+       key := AppKey{
+               App:                 "",
+               Project:             project,
+               CompositeApp:        compositeApp,
+               CompositeAppVersion: compositeAppVersion,
+       }
+
+       var resp []App
+       values, err := db.DBconn.Find(v.storeName, key, v.tagMeta)
+       if err != nil {
+               return []App{}, pkgerrors.Wrap(err, "Get Apps")
+       }
+
+       for _, value := range values {
+               a := App{}
+               err = db.DBconn.Unmarshal(value, &a)
+               if err != nil {
+                       return []App{}, pkgerrors.Wrap(err, "Unmarshaling Value")
+               }
+               resp = append(resp, a)
+       }
+
+       return resp, nil
+}
+
 // DeleteApp deletes the  App from database
 func (v *AppClient) DeleteApp(name string, p string, cN string, cV string) error {