From 609f3adb7b8ad2149d04259d9ff035880750a777 Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 2 Dec 2022 21:01:09 -0500 Subject: [PATCH] [PS-1928] Fix Organization Delete (#2464) --- .../Repositories/OrganizationRepository.cs | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/Infrastructure.EntityFramework/Repositories/OrganizationRepository.cs b/src/Infrastructure.EntityFramework/Repositories/OrganizationRepository.cs index bd60b53e8e..38d6e129e1 100644 --- a/src/Infrastructure.EntityFramework/Repositories/OrganizationRepository.cs +++ b/src/Infrastructure.EntityFramework/Repositories/OrganizationRepository.cs @@ -99,9 +99,42 @@ public class OrganizationRepository : Repository(organization.Id); + await dbContext.UserBumpAccountRevisionDateByOrganizationIdAsync(organization.Id); + var deleteCiphersTransaction = await dbContext.Database.BeginTransactionAsync(); + dbContext.Ciphers.RemoveRange( + dbContext.Ciphers.Where(c => c.UserId == null && c.OrganizationId == organization.Id)); + await deleteCiphersTransaction.CommitAsync(); + var organizationDeleteTransaction = await dbContext.Database.BeginTransactionAsync(); + dbContext.SsoUsers.RemoveRange(dbContext.SsoUsers.Where(su => su.OrganizationId == organization.Id)); + dbContext.SsoConfigs.RemoveRange(dbContext.SsoConfigs.Where(sc => sc.OrganizationId == organization.Id)); + var collectionUsers = from cu in dbContext.CollectionUsers + join ou in dbContext.OrganizationUsers on cu.OrganizationUserId equals ou.Id + where ou.OrganizationId == organization.Id + select cu; + dbContext.CollectionUsers.RemoveRange(collectionUsers); + dbContext.OrganizationUsers.RemoveRange( + dbContext.OrganizationUsers.Where(ou => ou.OrganizationId == organization.Id)); + dbContext.ProviderOrganizations.RemoveRange( + dbContext.ProviderOrganizations.Where(po => po.OrganizationId == organization.Id)); + // The below section are 3 SPROCS in SQL Server but are only called by here + dbContext.OrganizationApiKeys.RemoveRange( + dbContext.OrganizationApiKeys.Where(oa => oa.OrganizationId == organization.Id)); + dbContext.OrganizationConnections.RemoveRange( + dbContext.OrganizationConnections.Where(oc => oc.OrganizationId == organization.Id)); + var sponsoringOrgs = await dbContext.OrganizationSponsorships + .Where(os => os.SponsoringOrganizationId == organization.Id) + .ToListAsync(); + sponsoringOrgs.ForEach(os => os.SponsoringOrganizationId = null); + var sponsoredOrgs = await dbContext.OrganizationSponsorships + .Where(os => os.SponsoredOrganizationId == organization.Id) + .ToListAsync(); + sponsoredOrgs.ForEach(os => os.SponsoredOrganizationId = null); + + var orgEntity = await dbContext.FindAsync(organization.Id); dbContext.Remove(orgEntity); + + await organizationDeleteTransaction.CommitAsync(); await dbContext.SaveChangesAsync(); } }