Skip to content
15 changes: 8 additions & 7 deletions api/handler/v1/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap"

"github.com/odpf/shield/internal/org"
modelv1 "github.com/odpf/shield/model/v1"

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
Expand All @@ -18,10 +19,10 @@ import (
)

type OrganizationService interface {
GetOrganization(ctx context.Context, id string) (org.Organization, error)
CreateOrganization(ctx context.Context, org org.Organization) (org.Organization, error)
ListOrganizations(ctx context.Context) ([]org.Organization, error)
UpdateOrganization(ctx context.Context, toUpdate org.Organization) (org.Organization, error)
GetOrganization(ctx context.Context, id string) (modelv1.Organization, error)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@krtkvrm I think we don't need to version internal models. So would suggest removing versioning from here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah.. makes sense 👍

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

CreateOrganization(ctx context.Context, org modelv1.Organization) (modelv1.Organization, error)
ListOrganizations(ctx context.Context) ([]modelv1.Organization, error)
UpdateOrganization(ctx context.Context, toUpdate modelv1.Organization) (modelv1.Organization, error)
}

func (v Dep) ListOrganizations(ctx context.Context, request *shieldv1.ListOrganizationsRequest) (*shieldv1.ListOrganizationsResponse, error) {
Expand Down Expand Up @@ -68,7 +69,7 @@ func (v Dep) CreateOrganization(ctx context.Context, request *shieldv1.CreateOrg
slug = generateSlug(request.GetBody().Name)
}

newOrg, err := v.OrgService.CreateOrganization(ctx, org.Organization{
newOrg, err := v.OrgService.CreateOrganization(ctx, modelv1.Organization{
Name: request.GetBody().Name,
Slug: slug,
Metadata: metaDataMap,
Expand Down Expand Up @@ -134,7 +135,7 @@ func (v Dep) UpdateOrganization(ctx context.Context, request *shieldv1.UpdateOrg
return nil, grpcBadBodyError
}

updatedOrg, err := v.OrgService.UpdateOrganization(ctx, org.Organization{
updatedOrg, err := v.OrgService.UpdateOrganization(ctx, modelv1.Organization{
Id: request.GetId(),
Name: request.GetBody().Name,
Slug: request.GetBody().Slug,
Expand All @@ -155,7 +156,7 @@ func (v Dep) UpdateOrganization(ctx context.Context, request *shieldv1.UpdateOrg
return &shieldv1.UpdateOrganizationResponse{Organization: &orgPB}, nil
}

func transformOrgToPB(org org.Organization) (shieldv1.Organization, error) {
func transformOrgToPB(org modelv1.Organization) (shieldv1.Organization, error) {
metaData, err := structpb.NewStruct(mapOfInterfaceValues(org.Metadata))
if err != nil {
return shieldv1.Organization{}, err
Expand Down
38 changes: 19 additions & 19 deletions api/handler/v1/org_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import (
"testing"
"time"

"github.com/odpf/shield/internal/org"

"github.com/stretchr/testify/assert"

modelv1 "github.com/odpf/shield/model/v1"

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/structpb"
Expand All @@ -18,7 +18,7 @@ import (
shieldv1 "go.buf.build/odpf/gw/odpf/proton/odpf/shield/v1"
)

var testOrgMap = map[string]org.Organization{
var testOrgMap = map[string]modelv1.Organization{
"9f256f86-31a3-11ec-8d3d-0242ac130003": {
Id: "9f256f86-31a3-11ec-8d3d-0242ac130003",
Name: "Org 1",
Expand All @@ -42,15 +42,15 @@ func TestListOrganizations(t *testing.T) {
}{
{
title: "error in Org Service",
mockOrgSrv: mockOrgSrv{ListOrganizationsFunc: func(ctx context.Context) (organizations []org.Organization, err error) {
return []org.Organization{}, errors.New("some error")
mockOrgSrv: mockOrgSrv{ListOrganizationsFunc: func(ctx context.Context) (organizations []modelv1.Organization, err error) {
return []modelv1.Organization{}, errors.New("some error")
}},
want: nil,
err: status.Errorf(codes.Internal, internalServerError.Error()),
}, {
title: "success",
mockOrgSrv: mockOrgSrv{ListOrganizationsFunc: func(ctx context.Context) (organizations []org.Organization, err error) {
var testOrgList []org.Organization
mockOrgSrv: mockOrgSrv{ListOrganizationsFunc: func(ctx context.Context) (organizations []modelv1.Organization, err error) {
var testOrgList []modelv1.Organization
for _, o := range testOrgMap {
testOrgList = append(testOrgList, o)
}
Expand Down Expand Up @@ -98,8 +98,8 @@ func TestCreateOrganization(t *testing.T) {
}{
{
title: "error in fetching org list",
mockOrgSrv: mockOrgSrv{CreateOrganizationFunc: func(ctx context.Context, o org.Organization) (org.Organization, error) {
return org.Organization{}, errors.New("some error")
mockOrgSrv: mockOrgSrv{CreateOrganizationFunc: func(ctx context.Context, o modelv1.Organization) (modelv1.Organization, error) {
return modelv1.Organization{}, errors.New("some error")
}},
req: &shieldv1.CreateOrganizationRequest{Body: &shieldv1.OrganizationRequestBody{
Name: "some org",
Expand All @@ -125,8 +125,8 @@ func TestCreateOrganization(t *testing.T) {
},
{
title: "success",
mockOrgSrv: mockOrgSrv{CreateOrganizationFunc: func(ctx context.Context, o org.Organization) (org.Organization, error) {
return org.Organization{
mockOrgSrv: mockOrgSrv{CreateOrganizationFunc: func(ctx context.Context, o modelv1.Organization) (modelv1.Organization, error) {
return modelv1.Organization{
Id: "new-abc",
Name: "some org",
Slug: "abc",
Expand Down Expand Up @@ -167,24 +167,24 @@ func TestCreateOrganization(t *testing.T) {
}

type mockOrgSrv struct {
GetOrganizationFunc func(ctx context.Context, id string) (org.Organization, error)
CreateOrganizationFunc func(ctx context.Context, org org.Organization) (org.Organization, error)
ListOrganizationsFunc func(ctx context.Context) ([]org.Organization, error)
UpdateOrganizationFunc func(ctx context.Context, toUpdate org.Organization) (org.Organization, error)
GetOrganizationFunc func(ctx context.Context, id string) (modelv1.Organization, error)
CreateOrganizationFunc func(ctx context.Context, org modelv1.Organization) (modelv1.Organization, error)
ListOrganizationsFunc func(ctx context.Context) ([]modelv1.Organization, error)
UpdateOrganizationFunc func(ctx context.Context, toUpdate modelv1.Organization) (modelv1.Organization, error)
}

func (m mockOrgSrv) GetOrganization(ctx context.Context, id string) (org.Organization, error) {
func (m mockOrgSrv) GetOrganization(ctx context.Context, id string) (modelv1.Organization, error) {
return m.GetOrganizationFunc(ctx, id)
}

func (m mockOrgSrv) CreateOrganization(ctx context.Context, org org.Organization) (org.Organization, error) {
func (m mockOrgSrv) CreateOrganization(ctx context.Context, org modelv1.Organization) (modelv1.Organization, error) {
return m.CreateOrganizationFunc(ctx, org)
}

func (m mockOrgSrv) ListOrganizations(ctx context.Context) ([]org.Organization, error) {
func (m mockOrgSrv) ListOrganizations(ctx context.Context) ([]modelv1.Organization, error) {
return m.ListOrganizationsFunc(ctx)
}

func (m mockOrgSrv) UpdateOrganization(ctx context.Context, toUpdate org.Organization) (org.Organization, error) {
func (m mockOrgSrv) UpdateOrganization(ctx context.Context, toUpdate modelv1.Organization) (modelv1.Organization, error) {
return m.UpdateOrganizationFunc(ctx, toUpdate)
}
24 changes: 13 additions & 11 deletions api/handler/v1/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,32 @@ import (
"strings"

grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap"
"github.com/odpf/shield/internal/project"

shieldv1 "go.buf.build/odpf/gw/odpf/proton/odpf/shield/v1"
"github.com/odpf/shield/internal/project"
modelv1 "github.com/odpf/shield/model/v1"

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/structpb"
"google.golang.org/protobuf/types/known/timestamppb"

shieldv1 "go.buf.build/odpf/gw/odpf/proton/odpf/shield/v1"
)

var grpcProjectNotFoundErr = status.Errorf(codes.NotFound, "project doesn't exist")

type ProjectService interface {
GetProject(ctx context.Context, id string) (project.Project, error)
CreateProject(ctx context.Context, project project.Project) (project.Project, error)
ListProject(ctx context.Context) ([]project.Project, error)
UpdateProject(ctx context.Context, toUpdate project.Project) (project.Project, error)
Get(ctx context.Context, id string) (modelv1.Project, error)
Create(ctx context.Context, project modelv1.Project) (modelv1.Project, error)
List(ctx context.Context) ([]modelv1.Project, error)
Update(ctx context.Context, toUpdate modelv1.Project) (modelv1.Project, error)
}

func (v Dep) ListProjects(ctx context.Context, request *shieldv1.ListProjectsRequest) (*shieldv1.ListProjectsResponse, error) {
logger := grpczap.Extract(ctx)
var projects []*shieldv1.Project

projectList, err := v.ProjectService.ListProject(ctx)
projectList, err := v.ProjectService.List(ctx)
if err != nil {
logger.Error(err.Error())
return nil, grpcInternalServerError
Expand Down Expand Up @@ -61,7 +63,7 @@ func (v Dep) CreateProject(ctx context.Context, request *shieldv1.CreateProjectR
slug = generateSlug(request.GetBody().Name)
}

newProject, err := v.ProjectService.CreateProject(ctx, project.Project{
newProject, err := v.ProjectService.Create(ctx, modelv1.Project{
Name: request.GetBody().Name,
Slug: slug,
Metadata: metaDataMap,
Expand Down Expand Up @@ -92,7 +94,7 @@ func (v Dep) CreateProject(ctx context.Context, request *shieldv1.CreateProjectR
func (v Dep) GetProject(ctx context.Context, request *shieldv1.GetProjectRequest) (*shieldv1.GetProjectResponse, error) {
logger := grpczap.Extract(ctx)

fetchedProject, err := v.ProjectService.GetProject(ctx, request.GetId())
fetchedProject, err := v.ProjectService.Get(ctx, request.GetId())
if err != nil {
logger.Error(err.Error())
switch {
Expand Down Expand Up @@ -122,7 +124,7 @@ func (v Dep) UpdateProject(ctx context.Context, request *shieldv1.UpdateProjectR
return nil, grpcBadBodyError
}

updatedProject, err := v.ProjectService.UpdateProject(ctx, project.Project{
updatedProject, err := v.ProjectService.Update(ctx, modelv1.Project{
Id: request.GetId(),
Name: request.GetBody().Name,
Slug: request.GetBody().Slug,
Expand All @@ -142,7 +144,7 @@ func (v Dep) UpdateProject(ctx context.Context, request *shieldv1.UpdateProjectR
return &shieldv1.UpdateProjectResponse{Project: &projectPB}, nil
}

func transformProjectToPB(prj project.Project) (shieldv1.Project, error) {
func transformProjectToPB(prj modelv1.Project) (shieldv1.Project, error) {
metaData, err := structpb.NewStruct(mapOfInterfaceValues(prj.Metadata))
if err != nil {
return shieldv1.Project{}, err
Expand Down
50 changes: 26 additions & 24 deletions api/handler/v1/project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import (
"testing"
"time"

"github.com/odpf/shield/internal/project"
"github.com/stretchr/testify/assert"

"github.com/odpf/shield/internal/project"
modelv1 "github.com/odpf/shield/model/v1"

shieldv1 "go.buf.build/odpf/gw/odpf/proton/odpf/shield/v1"

"google.golang.org/protobuf/types/known/structpb"
Expand All @@ -17,7 +19,7 @@ import (

var testProjectID = "ab657ae7-8c9e-45eb-9862-dd9ceb6d5c71"

var testProjectMap = map[string]project.Project{
var testProjectMap = map[string]modelv1.Project{
"ab657ae7-8c9e-45eb-9862-dd9ceb6d5c71": {
Id: "ab657ae7-8c9e-45eb-9862-dd9ceb6d5c71",
Name: "Prj 1",
Expand Down Expand Up @@ -74,8 +76,8 @@ func TestCreateProject(t *testing.T) {
},
},
}},
mockProjectSrv: mockProject{CreateProjectFunc: func(ctx context.Context, prj project.Project) (project.Project, error) {
return project.Project{}, errors.New("some service error")
mockProjectSrv: mockProject{CreateProjectFunc: func(ctx context.Context, prj modelv1.Project) (modelv1.Project, error) {
return modelv1.Project{}, errors.New("some service error")
}},
err: grpcInternalServerError,
},
Expand All @@ -90,7 +92,7 @@ func TestCreateProject(t *testing.T) {
},
},
}},
mockProjectSrv: mockProject{CreateProjectFunc: func(ctx context.Context, prj project.Project) (project.Project, error) {
mockProjectSrv: mockProject{CreateProjectFunc: func(ctx context.Context, prj modelv1.Project) (modelv1.Project, error) {
return testProjectMap[testProjectID], nil
}},
want: &shieldv1.CreateProjectResponse{Project: &shieldv1.Project{
Expand Down Expand Up @@ -134,16 +136,16 @@ func TestListProjects(t *testing.T) {
{
title: "error in service",
req: &shieldv1.ListProjectsRequest{},
mockProjectSrv: mockProject{ListProjectFunc: func(ctx context.Context) ([]project.Project, error) {
return []project.Project{}, errors.New("some store error")
mockProjectSrv: mockProject{ListProjectFunc: func(ctx context.Context) ([]modelv1.Project, error) {
return []modelv1.Project{}, errors.New("some store error")
}},
err: grpcInternalServerError,
},
{
title: "success",
req: &shieldv1.ListProjectsRequest{},
mockProjectSrv: mockProject{ListProjectFunc: func(ctx context.Context) ([]project.Project, error) {
var prjs []project.Project
mockProjectSrv: mockProject{ListProjectFunc: func(ctx context.Context) ([]modelv1.Project, error) {
var prjs []modelv1.Project

for _, v := range testProjectMap {
prjs = append(prjs, v)
Expand Down Expand Up @@ -206,31 +208,31 @@ func TestGetProject(t *testing.T) {
{
title: "project doesnt exist",
req: &shieldv1.GetProjectRequest{},
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (project.Project, error) {
return project.Project{}, project.ProjectDoesntExist
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (modelv1.Project, error) {
return modelv1.Project{}, project.ProjectDoesntExist
}},
err: grpcProjectNotFoundErr,
},
{
title: "uuid syntax error",
req: &shieldv1.GetProjectRequest{},
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (project.Project, error) {
return project.Project{}, project.InvalidUUID
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (modelv1.Project, error) {
return modelv1.Project{}, project.InvalidUUID
}},
err: grpcBadBodyError,
},
{
title: "service error",
req: &shieldv1.GetProjectRequest{},
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (project.Project, error) {
return project.Project{}, errors.New("some error")
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (modelv1.Project, error) {
return modelv1.Project{}, errors.New("some error")
}},
err: grpcInternalServerError,
},
{
title: "success",
req: &shieldv1.GetProjectRequest{},
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (project.Project, error) {
mockProjectSrv: mockProject{GetProjectFunc: func(ctx context.Context, id string) (modelv1.Project, error) {
return testProjectMap[testProjectID], nil
}},
want: &shieldv1.GetProjectResponse{Project: &shieldv1.Project{
Expand Down Expand Up @@ -262,24 +264,24 @@ func TestGetProject(t *testing.T) {
}

type mockProject struct {
GetProjectFunc func(ctx context.Context, id string) (project.Project, error)
CreateProjectFunc func(ctx context.Context, project project.Project) (project.Project, error)
ListProjectFunc func(ctx context.Context) ([]project.Project, error)
UpdateProjectFunc func(ctx context.Context, toUpdate project.Project) (project.Project, error)
GetProjectFunc func(ctx context.Context, id string) (modelv1.Project, error)
CreateProjectFunc func(ctx context.Context, project modelv1.Project) (modelv1.Project, error)
ListProjectFunc func(ctx context.Context) ([]modelv1.Project, error)
UpdateProjectFunc func(ctx context.Context, toUpdate modelv1.Project) (modelv1.Project, error)
}

func (m mockProject) ListProject(ctx context.Context) ([]project.Project, error) {
func (m mockProject) List(ctx context.Context) ([]modelv1.Project, error) {
return m.ListProjectFunc(ctx)
}

func (m mockProject) CreateProject(ctx context.Context, project project.Project) (project.Project, error) {
func (m mockProject) Create(ctx context.Context, project modelv1.Project) (modelv1.Project, error) {
return m.CreateProjectFunc(ctx, project)
}

func (m mockProject) GetProject(ctx context.Context, id string) (project.Project, error) {
func (m mockProject) Get(ctx context.Context, id string) (modelv1.Project, error) {
return m.GetProjectFunc(ctx, id)
}

func (m mockProject) UpdateProject(ctx context.Context, toUpdate project.Project) (project.Project, error) {
func (m mockProject) Update(ctx context.Context, toUpdate modelv1.Project) (modelv1.Project, error) {
return m.UpdateProjectFunc(ctx, toUpdate)
}
Loading