diff --git a/pkg/service/tenant.go b/pkg/service/tenant.go index 200214c..c254ad1 100644 --- a/pkg/service/tenant.go +++ b/pkg/service/tenant.go @@ -52,26 +52,32 @@ func (s *tenantService) Update(ctx context.Context, req *v1.TenantUpdateRequest) func (s *tenantService) Delete(ctx context.Context, req *v1.TenantDeleteRequest) (*v1.TenantResponse, error) { tenant := req.NewTenant() - tenantFilter := map[string]any{ + tenantIsHostFilter := map[string]any{ "tenantmember ->> 'tenant_id'": tenant.Meta.Id, } - memberFilter := map[string]any{ + tenantIsMemberFilter := map[string]any{ "tenantmember ->> 'member_id'": tenant.Meta.Id, } - tenantMemberships, _, err := s.tenantMemberStore.Find(ctx, tenantFilter, nil) + tenantIsHostMemberships, _, err := s.tenantMemberStore.Find(ctx, tenantIsHostFilter, nil) if err != nil { return nil, err } - memberMemberships, _, err := s.tenantMemberStore.Find(ctx, memberFilter, nil) + tenantIsMemberMemberships, _, err := s.tenantMemberStore.Find(ctx, tenantIsMemberFilter, nil) if err != nil { return nil, err } - var ids []string - for _, m := range tenantMemberships { - ids = append(ids, m.Meta.Id) + + unionMap := make(map[string]bool) + for _, m := range tenantIsHostMemberships { + unionMap[m.Meta.Id] = true + } + for _, m := range tenantIsMemberMemberships { + unionMap[m.Meta.Id] = true } - for _, m := range memberMemberships { - ids = append(ids, m.Meta.Id) + + var ids []string + for k := range unionMap { + ids = append(ids, k) } if len(ids) > 0 { diff --git a/pkg/service/tenant_test.go b/pkg/service/tenant_test.go index d88addb..0240504 100644 --- a/pkg/service/tenant_test.go +++ b/pkg/service/tenant_test.go @@ -112,8 +112,25 @@ func TestDeleteTenant(t *testing.T) { var paging *v1.Paging storageMock.On("Delete", ctx, t3.Meta.Id).Return(nil) - memberStorageMock.On("Find", ctx, tfilter, paging).Return([]*v1.TenantMember{}, nil, nil) - memberStorageMock.On("Find", ctx, mfilter, paging).Return([]*v1.TenantMember{}, nil, nil) + memberStorageMock.On("Find", ctx, tfilter, paging).Return([]*v1.TenantMember{ + { + Meta: &v1.Meta{ + Id: "t3", + }, + TenantId: t3.Meta.Id, + MemberId: t3.Meta.Id, + }, + }, nil, nil) + memberStorageMock.On("Find", ctx, mfilter, paging).Return([]*v1.TenantMember{ + { + Meta: &v1.Meta{ + Id: "t3", + }, + TenantId: t3.Meta.Id, + MemberId: t3.Meta.Id, + }, + }, nil, nil) + memberStorageMock.On("DeleteAll", ctx, "t3").Return(nil) resp, err := ts.Delete(ctx, tdr) require.NoError(t, err) assert.NotNil(t, resp)