Skip to content

Commit 62c7d55

Browse files
authored
Fix duplicate memberships in tenant delete (#123)
1 parent d0322b7 commit 62c7d55

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

pkg/service/tenant.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,26 +52,32 @@ func (s *tenantService) Update(ctx context.Context, req *v1.TenantUpdateRequest)
5252

5353
func (s *tenantService) Delete(ctx context.Context, req *v1.TenantDeleteRequest) (*v1.TenantResponse, error) {
5454
tenant := req.NewTenant()
55-
tenantFilter := map[string]any{
55+
tenantIsHostFilter := map[string]any{
5656
"tenantmember ->> 'tenant_id'": tenant.Meta.Id,
5757
}
58-
memberFilter := map[string]any{
58+
tenantIsMemberFilter := map[string]any{
5959
"tenantmember ->> 'member_id'": tenant.Meta.Id,
6060
}
61-
tenantMemberships, _, err := s.tenantMemberStore.Find(ctx, tenantFilter, nil)
61+
tenantIsHostMemberships, _, err := s.tenantMemberStore.Find(ctx, tenantIsHostFilter, nil)
6262
if err != nil {
6363
return nil, err
6464
}
65-
memberMemberships, _, err := s.tenantMemberStore.Find(ctx, memberFilter, nil)
65+
tenantIsMemberMemberships, _, err := s.tenantMemberStore.Find(ctx, tenantIsMemberFilter, nil)
6666
if err != nil {
6767
return nil, err
6868
}
69-
var ids []string
70-
for _, m := range tenantMemberships {
71-
ids = append(ids, m.Meta.Id)
69+
70+
unionMap := make(map[string]bool)
71+
for _, m := range tenantIsHostMemberships {
72+
unionMap[m.Meta.Id] = true
73+
}
74+
for _, m := range tenantIsMemberMemberships {
75+
unionMap[m.Meta.Id] = true
7276
}
73-
for _, m := range memberMemberships {
74-
ids = append(ids, m.Meta.Id)
77+
78+
var ids []string
79+
for k := range unionMap {
80+
ids = append(ids, k)
7581
}
7682

7783
if len(ids) > 0 {

pkg/service/tenant_test.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,25 @@ func TestDeleteTenant(t *testing.T) {
112112
var paging *v1.Paging
113113

114114
storageMock.On("Delete", ctx, t3.Meta.Id).Return(nil)
115-
memberStorageMock.On("Find", ctx, tfilter, paging).Return([]*v1.TenantMember{}, nil, nil)
116-
memberStorageMock.On("Find", ctx, mfilter, paging).Return([]*v1.TenantMember{}, nil, nil)
115+
memberStorageMock.On("Find", ctx, tfilter, paging).Return([]*v1.TenantMember{
116+
{
117+
Meta: &v1.Meta{
118+
Id: "t3",
119+
},
120+
TenantId: t3.Meta.Id,
121+
MemberId: t3.Meta.Id,
122+
},
123+
}, nil, nil)
124+
memberStorageMock.On("Find", ctx, mfilter, paging).Return([]*v1.TenantMember{
125+
{
126+
Meta: &v1.Meta{
127+
Id: "t3",
128+
},
129+
TenantId: t3.Meta.Id,
130+
MemberId: t3.Meta.Id,
131+
},
132+
}, nil, nil)
133+
memberStorageMock.On("DeleteAll", ctx, "t3").Return(nil)
117134
resp, err := ts.Delete(ctx, tdr)
118135
require.NoError(t, err)
119136
assert.NotNil(t, resp)

0 commit comments

Comments
 (0)