}
// Name is required.
- if p.ProjectName == "" {
+ if p.MetaData.Name == "" {
http.Error(w, "Missing name in POST request", http.StatusBadRequest)
return
}
}
// 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"]
/*
- * 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.
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",
+ },
+ },
},
},
},
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",
+ },
+ },
},
},
},
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
/*
- * 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.
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
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")
}
return p, nil
}
+
// GetProject returns the Project for corresponding name
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")
}
return Project{}, pkgerrors.New("Error getting Project")
}
+
// DeleteProject the Project from database
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
/*
- * 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.
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
+
pkgerrors "github.com/pkg/errors"
)
{
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{},
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\"}"+
+ "}"),
},
},
},