Skip to content

Commit f57ef8a

Browse files
devsjcbraddf
andauthored
feat(admin): delete org route (#37)
Co-authored-by: braddf <info@bradfulford.co.uk>
1 parent abb7750 commit f57ef8a

File tree

7 files changed

+88
-3
lines changed

7 files changed

+88
-3
lines changed

internal/server/dummy/adminserverimpl.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ func NewDataPlatformAdministrationServiceServerImpl() *DataPlatformAdministratio
2525

2626
type DataPlatformAdministrationServiceServerImpl struct{}
2727

28+
func (d *DataPlatformAdministrationServiceServerImpl) DeleteOrganisation(
29+
ctx context.Context,
30+
req *pb.DeleteOrganisationRequest,
31+
) (*pb.DeleteOrganisationResponse, error) {
32+
return &pb.DeleteOrganisationResponse{}, nil
33+
}
34+
2835
// CreateLocationPolicyGroup implements dp.DataPlatformAdministrationServiceServer.
2936
func (d *DataPlatformAdministrationServiceServerImpl) CreateLocationPolicyGroup(
3037
ctx context.Context,

internal/server/postgres/adminserver_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,51 @@ func TestCreateOrganisation(t *testing.T) {
8080
}
8181
}
8282

83+
func TestDeleteOrganisation(t *testing.T) {
84+
metadata, err := structpb.NewStruct(map[string]any{"source": "test"})
85+
require.NoError(t, err)
86+
87+
orgResp, err := ac.CreateOrganisation(context.Background(), &pb.CreateOrganisationRequest{
88+
OrgName: "test_delete_organisation_1",
89+
Metadata: metadata,
90+
})
91+
92+
require.NoError(t, err)
93+
94+
testCases := []struct {
95+
name string
96+
deleteReq *pb.DeleteOrganisationRequest
97+
}{
98+
{
99+
name: "Should delete existing organisation",
100+
deleteReq: &pb.DeleteOrganisationRequest{
101+
OrgName: orgResp.OrgName,
102+
},
103+
},
104+
{
105+
name: "Should handle deleting a non-existent organisation",
106+
deleteReq: &pb.DeleteOrganisationRequest{
107+
OrgName: "non_existent_delete_organisation",
108+
},
109+
},
110+
}
111+
112+
for _, tc := range testCases {
113+
t.Run(tc.name, func(t *testing.T) {
114+
_, err := ac.DeleteOrganisation(t.Context(), tc.deleteReq)
115+
if strings.Contains(tc.name, "Shouldn't") {
116+
require.Error(t, err)
117+
} else {
118+
require.NoError(t, err)
119+
_, err := ac.GetOrganisation(t.Context(), &pb.GetOrganisationRequest{
120+
OrgName: tc.deleteReq.OrgName,
121+
})
122+
require.Error(t, err)
123+
}
124+
})
125+
}
126+
}
127+
83128
func TestAddRemoveLocationPolicyGroupToOrganisation(t *testing.T) {
84129
orgResp, err := ac.CreateOrganisation(t.Context(), &pb.CreateOrganisationRequest{
85130
OrgName: "test_add_remove_location_policy_group_organisation",

internal/server/postgres/adminserverimpl.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,30 @@ func NewDataPlatformAdministrationServiceServerImpl() *DataPlatformAdministratio
3434
// It also expects a zerolog logger to be set in the context.
3535
type DataPlatformAdministrationServiceServerImpl struct{}
3636

37+
func (d *DataPlatformAdministrationServiceServerImpl) DeleteOrganisation(
38+
ctx context.Context,
39+
req *pb.DeleteOrganisationRequest,
40+
) (*pb.DeleteOrganisationResponse, error) {
41+
l := zerolog.Ctx(ctx)
42+
querier := db.New(ix.GetTxFromContext(ctx))
43+
44+
dobnParams := db.DeleteOrgByNameParams{
45+
OrgName: req.OrgName,
46+
}
47+
48+
err := querier.DeleteOrgByName(ctx, dobnParams)
49+
if err != nil {
50+
l.Error().Err(err).Msgf("querier.DeleteOrgByName(%+v)", dobnParams)
51+
52+
return nil, status.Error(
53+
codes.Internal,
54+
"Encountered database error. Check application logs.",
55+
)
56+
}
57+
58+
return &pb.DeleteOrganisationResponse{}, nil
59+
}
60+
3761
func (d *DataPlatformAdministrationServiceServerImpl) CreateLocationPolicyGroup(
3862
ctx context.Context,
3963
req *pb.CreateLocationPolicyGroupRequest,

internal/server/postgres/sql/migrations/00005_iam.sql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ CREATE TABLE iam.users (
7171
PRIMARY KEY (user_uuid),
7272
UNIQUE (oauth_id)
7373
);
74-
CREATE INDEX ON iam.users (oauth_id);
7574
CREATE INDEX ON iam.users (org_uuid);
7675

7776
/*

internal/server/postgres/sql/queries/iam.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ SELECT
4040
FROM iam.orgs
4141
ORDER BY org_name;
4242

43-
-- name: DeleteOrg :exec
43+
-- name: DeleteOrgByName :exec
4444
DELETE FROM iam.orgs
45-
WHERE org_uuid = $1;
45+
WHERE org_name = LOWER(sqlc.arg(org_name)::TEXT);
4646

4747
-- name: AddUserToOrgByOAuthIDAndName :exec
4848
INSERT INTO iam.users (org_uuid, oauth_id)

proto/ocf/dp/dp-admin.messages.proto

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ message GetOrganisationResponse {
9898
repeated string user_oauth_ids = 6;
9999
}
100100

101+
message DeleteOrganisationRequest {
102+
string org_name = 1 [
103+
(buf.validate.field).string.min_len = 2,
104+
(buf.validate.field).string.max_len = 128
105+
];
106+
}
107+
108+
message DeleteOrganisationResponse {}
109+
101110
message AddLocationPolicyGroupToOrganisationRequest {
102111
string org_name = 1 [
103112
(buf.validate.field).string.min_len = 2,

proto/ocf/dp/dp-admin.service.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ service DataPlatformAdministrationService {
1414

1515
rpc CreateOrganisation(CreateOrganisationRequest) returns (CreateOrganisationResponse) {}
1616
rpc GetOrganisation(GetOrganisationRequest) returns (GetOrganisationResponse) {}
17+
rpc DeleteOrganisation(DeleteOrganisationRequest) returns (DeleteOrganisationResponse) {}
1718
rpc AddUserToOrganisation(AddUserToOrganisationRequest) returns (AddUserToOrganisationResponse) {}
1819
rpc RemoveUserFromOrganisation(RemoveUserFromOrganisationRequest) returns (RemoveUserFromOrganisationResponse) {}
1920
rpc AddLocationPolicyGroupToOrganisation(AddLocationPolicyGroupToOrganisationRequest) returns (AddLocationPolicyGroupToOrganisationResponse) {}

0 commit comments

Comments
 (0)