From 1fc375855ce049e62e9b8aa38c192da697be43d2 Mon Sep 17 00:00:00 2001 From: Ieva Date: Wed, 18 Oct 2023 10:40:26 +0100 Subject: [PATCH] Chore: delete team related entries for an org after the org gets deleted (#76706) * delete team related entries for an org after the org gets deleted * fix tests * one more test fix --- pkg/services/org/org.go | 1 + pkg/services/org/orgimpl/org.go | 4 ++++ pkg/services/org/orgimpl/org_test.go | 3 +++ pkg/services/org/orgimpl/store.go | 19 +++++++++++++++++-- pkg/services/org/orgtest/fake.go | 3 +++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pkg/services/org/org.go b/pkg/services/org/org.go index b1920d0b8ec..b41c7a80a6f 100644 --- a/pkg/services/org/org.go +++ b/pkg/services/org/org.go @@ -22,4 +22,5 @@ type Service interface { RemoveOrgUser(context.Context, *RemoveOrgUserCommand) error GetOrgUsers(context.Context, *GetOrgUsersQuery) ([]*OrgUserDTO, error) SearchOrgUsers(context.Context, *SearchOrgUsersQuery) (*SearchOrgUsersQueryResult, error) + RegisterDelete(query string) } diff --git a/pkg/services/org/orgimpl/org.go b/pkg/services/org/orgimpl/org.go index 3c6c9ffed3b..f9395027cdf 100644 --- a/pkg/services/org/orgimpl/org.go +++ b/pkg/services/org/orgimpl/org.go @@ -241,3 +241,7 @@ func readQuotaConfig(cfg *setting.Cfg) (*quota.Map, error) { limits.Set(userTag, cfg.Quota.User.Org) return limits, nil } + +func (s *Service) RegisterDelete(query string) { + s.store.RegisterDelete(query) +} diff --git a/pkg/services/org/orgimpl/org_test.go b/pkg/services/org/orgimpl/org_test.go index 639f101d303..1bf94ed68e9 100644 --- a/pkg/services/org/orgimpl/org_test.go +++ b/pkg/services/org/orgimpl/org_test.go @@ -154,3 +154,6 @@ func (f *FakeOrgStore) RemoveOrgUser(ctx context.Context, cmd *org.RemoveOrgUser func (f *FakeOrgStore) Count(ctx context.Context, _ *quota.ScopeParameters) (*quota.Map, error) { return nil, nil } + +func (f *FakeOrgStore) RegisterDelete(query string) { +} diff --git a/pkg/services/org/orgimpl/store.go b/pkg/services/org/orgimpl/store.go index 4c34861ff22..59eb2dc1016 100644 --- a/pkg/services/org/orgimpl/store.go +++ b/pkg/services/org/orgimpl/store.go @@ -46,14 +46,16 @@ type store interface { RemoveOrgUser(context.Context, *org.RemoveOrgUserCommand) error Count(context.Context, *quota.ScopeParameters) (*quota.Map, error) + RegisterDelete(query string) } type sqlStore struct { db db.DB dialect migrator.Dialect //TODO: moved to service - log log.Logger - cfg *setting.Cfg + log log.Logger + cfg *setting.Cfg + deletes []string } func (ss *sqlStore) Get(ctx context.Context, orgID int64) (*org.Org, error) { @@ -239,8 +241,16 @@ func (ss *sqlStore) Delete(ctx context.Context, cmd *org.DeleteOrgCommand) error "DELETE FROM alert WHERE org_id = ?", "DELETE FROM annotation WHERE org_id = ?", "DELETE FROM kv_store WHERE org_id = ?", + "DELETE FROM team WHERE org_id = ?", + "DELETE FROM team_member WHERE org_id = ?", + "DELETE FROM team_role WHERE org_id = ?", + "DELETE FROM user_role WHERE org_id = ?", + "DELETE FROM builtin_role WHERE org_id = ?", } + // Add registered deletes + deletes = append(deletes, ss.deletes...) + for _, sql := range deletes { _, err := sess.Exec(sql, cmd.ID) if err != nil { @@ -822,3 +832,8 @@ func removeUserOrg(sess *db.Session, userID int64) error { _, err := sess.ID(userID).MustCols("org_id").Update(&user) return err } + +// RegisterDelete registers a delete query to be executed when an org is deleted, used to delete enterprise data. +func (ss *sqlStore) RegisterDelete(query string) { + ss.deletes = append(ss.deletes, query) +} diff --git a/pkg/services/org/orgtest/fake.go b/pkg/services/org/orgtest/fake.go index 84fed24e985..323cce75be8 100644 --- a/pkg/services/org/orgtest/fake.go +++ b/pkg/services/org/orgtest/fake.go @@ -99,3 +99,6 @@ func (f *FakeOrgService) RemoveOrgUser(ctx context.Context, cmd *org.RemoveOrgUs func (f *FakeOrgService) SearchOrgUsers(ctx context.Context, query *org.SearchOrgUsersQuery) (*org.SearchOrgUsersQueryResult, error) { return f.ExpectedSearchOrgUsersResult, f.ExpectedError } + +func (f *FakeOrgService) RegisterDelete(query string) { +}