Made changes to the Project API. 18/102018/3
authorRajamohan Raj <rajamohan.raj@intel.com>
Wed, 19 Feb 2020 19:35:38 +0000 (19:35 +0000)
committerRajamohan Raj <rajamohan.raj@intel.com>
Wed, 19 Feb 2020 20:54:37 +0000 (20:54 +0000)
Issue-ID: MULTICLOUD-875
Signed-off-by: Rajamohan Raj <rajamohan.raj@intel.com>
Change-Id: Ie1e9404069dae883ece8c6b1ca5eb07d284f96c0

src/orchestrator/api/projecthandler.go
src/orchestrator/api/projecthandler_test.go
src/orchestrator/examples/example_module.go
src/orchestrator/pkg/module/project.go
src/orchestrator/pkg/module/project_test.go

index 1830b91..1e78c67 100644 (file)
@@ -49,7 +49,7 @@ func (h projectHandler) createHandler(w http.ResponseWriter, r *http.Request) {
        }
 
        // Name is required.
-       if p.ProjectName == "" {
+       if p.MetaData.Name == "" {
                http.Error(w, "Missing name in POST request", http.StatusBadRequest)
                return
        }
@@ -70,7 +70,7 @@ func (h projectHandler) createHandler(w http.ResponseWriter, r *http.Request) {
 }
 
 // Get handles GET operations on a particular Project Name
-// Returns a rb.Project
+// Returns a Project
 func (h projectHandler) getHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        name := vars["project-name"]
index 41f515d..ee6ed35 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -77,20 +77,32 @@ func TestProjectCreateHandler(t *testing.T) {
                        label:        "Create Project",
                        expectedCode: http.StatusCreated,
                        reader: bytes.NewBuffer([]byte(`{
-                               "project-name":"testProject",
-                               "description":"Test Project used for unit testing"
-                               }`)),
+                               "metadata" : {
+                                       "name": "testProject",
+                               "description": "Test Project used for unit testing",
+                               "userData1": "data1",
+                               "userData2": "data2"
+                               }
+                       }`)),
                        expected: moduleLib.Project{
-                               ProjectName: "testProject",
-                               Description: "Test Project used for unit testing",
+                               MetaData: moduleLib.ProjectMetaData{
+                                       Name: "testProject",
+                                       Description: "Test Project used for unit testing",
+                                       UserData1: "data1",
+                                       UserData2: "data2",
+                               },
                        },
                        projectClient: &mockProjectManager{
                                //Items that will be returned by the mocked Client
                                Items: []moduleLib.Project{
-                                       {
-                                               ProjectName: "testProject",
-                                               Description: "Test Project used for unit testing",
-                                       },
+                                                       moduleLib.Project{
+                                                               MetaData: moduleLib.ProjectMetaData{
+                                                                       Name: "testProject",
+                                                                       Description: "Test Project used for unit testing",
+                                                                       UserData1: "data1",
+                                                                       UserData2: "data2",
+                                                               },
+                                                       },
                                },
                        },
                },
@@ -141,16 +153,24 @@ func TestProjectGetHandler(t *testing.T) {
                        label:        "Get Project",
                        expectedCode: http.StatusOK,
                        expected: moduleLib.Project{
-                               ProjectName: "testProject",
-                               Description: "A Test project for unit testing",
+                               MetaData: moduleLib.ProjectMetaData{
+                                       Name: "testProject",
+                                       Description: "Test Project used for unit testing",
+                                       UserData1: "data1",
+                                       UserData2: "data2",
+                               },
                        },
                        name: "testProject",
                        projectClient: &mockProjectManager{
                                Items: []moduleLib.Project{
-                                       {
-                                               ProjectName: "testProject",
-                                               Description: "A Test project for unit testing",
-                                       },
+                                                               moduleLib.Project{
+                                                                       MetaData: moduleLib.ProjectMetaData{
+                                                                               Name: "testProject",
+                                                                               Description: "Test Project used for unit testing",
+                                                                               UserData1: "data1",
+                                                                               UserData2: "data2",
+                                                                       },
+                                                               },
                                },
                        },
                },
index 29ecdc2..9138b08 100644 (file)
@@ -31,7 +31,7 @@ func ExampleClient_Project() {
                return
        }
        // Perform operations on Project Module
-       _, err := c.Project.CreateProject(moduleLib.Project{ProjectName: "test"})
+       _, err := c.Project.CreateProject(moduleLib.Project{MetaData: moduleLib.ProjectMetaData{Name: "test", Description: "test", UserData1: "userData1", UserData2: "userData2"}})
        if err != nil {
                log.Println(err)
                return
index e44164f..796e9e9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,22 +18,30 @@ package module
 
 import (
        "encoding/json"
-
        "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
 
        pkgerrors "github.com/pkg/errors"
 )
 
-// Project contains the parameters needed for Projects
-// It implements the interface for managing the Projects
+
+// Project contains the metaData for Projects
 type Project struct {
-       ProjectName string `json:"project-name"`
+       MetaData ProjectMetaData`json:"metadata"`
+}
+
+
+// ProjectMetaData contains the parameters for creating a project
+type ProjectMetaData struct {
+       Name string `json:"name"`
        Description string `json:"description"`
+       UserData1 string `userData1:"userData1"`
+       UserData2 string `userData2:"userData2"`
 }
 
+
 // ProjectKey is the key structure that is used in the database
 type ProjectKey struct {
-       ProjectName string `json:"rb-name"`
+       ProjectName string `json:"project"`
 }
 
 // We will use json marshalling to convert to string to
@@ -47,43 +55,48 @@ func (pk ProjectKey) String() string {
        return string(out)
 }
 
-// Manager is an interface exposes the Project functionality
+
+// ProjectManager is an interface exposes the Project functionality
 type ProjectManager interface {
        CreateProject(pr Project) (Project, error)
        GetProject(name string) (Project, error)
        DeleteProject(name string) error
 }
 
-// ProjectClient implements the Manager
+
+// ProjectClient implements the ProjectManager
 // It will also be used to maintain some localized state
 type ProjectClient struct {
        storeName           string
        tagMeta, tagContent string
 }
 
+
 // NewProjectClient returns an instance of the ProjectClient
-// which implements the Manager
+// which implements the ProjectManager
 func NewProjectClient() *ProjectClient {
        return &ProjectClient{
+               storeName: "orchestrator",
                tagMeta: "projectmetadata",
        }
 }
 
+
 // CreateProject a new collection based on the project
 func (v *ProjectClient) CreateProject(p Project) (Project, error) {
 
        //Construct the composite key to select the entry
        key := ProjectKey{
-               ProjectName: p.ProjectName,
+               ProjectName: p.MetaData.Name,
        }
 
        //Check if this Project already exists
-       _, err := v.GetProject(p.ProjectName)
+       _, err := v.GetProject(p.MetaData.Name)
        if err == nil {
                return Project{}, pkgerrors.New("Project already exists")
        }
 
-       err = db.DBconn.Create(p.ProjectName, key, v.tagMeta, p)
+       err = db.DBconn.Create(v.storeName, key, v.tagMeta, p)
        if err != nil {
                return Project{}, pkgerrors.Wrap(err, "Creating DB Entry")
        }
@@ -91,6 +104,7 @@ func (v *ProjectClient) CreateProject(p Project) (Project, error) {
        return p, nil
 }
 
+
 // GetProject returns the Project for corresponding name
 func (v *ProjectClient) GetProject(name string) (Project, error) {
 
@@ -98,7 +112,7 @@ func (v *ProjectClient) GetProject(name string) (Project, error) {
        key := ProjectKey{
                ProjectName: name,
        }
-       value, err := db.DBconn.Read(name, key, v.tagMeta)
+       value, err := db.DBconn.Read(v.storeName, key, v.tagMeta)
        if err != nil {
                return Project{}, pkgerrors.Wrap(err, "Get Project")
        }
@@ -116,6 +130,7 @@ func (v *ProjectClient) GetProject(name string) (Project, error) {
        return Project{}, pkgerrors.New("Error getting Project")
 }
 
+
 // DeleteProject the  Project from database
 func (v *ProjectClient) DeleteProject(name string) error {
 
@@ -123,11 +138,11 @@ func (v *ProjectClient) DeleteProject(name string) error {
        key := ProjectKey{
                ProjectName: name,
        }
-       err := db.DBconn.Delete(name, key, v.tagMeta)
+       err := db.DBconn.Delete(v.storeName, key, v.tagMeta)
        if err != nil {
                return pkgerrors.Wrap(err, "Delete Project Entry;")
        }
 
        //TODO: Delete the collection when the project is deleted
        return nil
-}
+}
\ No newline at end of file
index 7f4d9b3..90fe30b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ import (
 
        "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
 
+
        pkgerrors "github.com/pkg/errors"
 )
 
@@ -37,12 +38,20 @@ func TestCreateProject(t *testing.T) {
                {
                        label: "Create Project",
                        inp: Project{
-                               ProjectName: "testProject",
-                               Description: "A sample Project used for unit testing",
+                               MetaData: ProjectMetaData{
+                                       Name: "testProject",
+                                       Description: "A sample Project used for unit testing",
+                                       UserData1: "data1",
+                                       UserData2: "data2",
+                               },
                        },
                        expected: Project{
-                               ProjectName: "testProject",
-                               Description: "A sample Project used for unit testing",
+                               MetaData: ProjectMetaData{
+                                       Name:"testProject",
+                                       Description: "A sample Project used for unit testing",
+                                       UserData1: "data1",
+                                       UserData2: "data2",
+                               },
                        },
                        expectedError: "",
                        mockdb:        &db.MockDB{},
@@ -92,16 +101,25 @@ func TestGetProject(t *testing.T) {
                        label: "Get Project",
                        name:  "testProject",
                        expected: Project{
-                               ProjectName: "testProject",
-                               Description: "Test project for unit testing",
+                               MetaData: ProjectMetaData{
+                                       Name: "testProject",
+                                       Description: "Test project for unit testing",
+                                       UserData1: "userData1",
+                                       UserData2: "userData2",
+                               },
                        },
                        expectedError: "",
                        mockdb: &db.MockDB{
                                Items: map[string]map[string][]byte{
                                        ProjectKey{ProjectName: "testProject"}.String(): {
                                                "projectmetadata": []byte(
-                                                       "{\"project-name\":\"testProject\"," +
-                                                               "\"description\":\"Test project for unit testing\"}"),
+                                                       "{" +
+                                                               "\"metadata\" : {"+
+                                                                       "\"Name\":\"testProject\"," +
+                                                                       "\"Description\":\"Test project for unit testing\"," +
+                                                                       "\"UserData1\": \"userData1\","+
+                                                                       "\"UserData2\":\"userData2\"}"+
+                                                       "}"),
                                        },
                                },
                        },