The core infrastructure backend (API, database, Docker, etc).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

183 lines
3.9 KiB

-- Create sproc to bump the revision date of a batch of users
IF OBJECT_ID('[dbo].[User_BumpAccountRevisionDateByOrganizationUserIds]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds]
END
GO
CREATE PROCEDURE [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds]
@OrganizationUserIds [dbo].[GuidIdArray] READONLY
AS
BEGIN
SET NOCOUNT ON
SELECT
OU.UserId
INTO
#UserIds
FROM
[dbo].[OrganizationUser] OU
INNER JOIN
@OrganizationUserIds OUIds ON OUIds.Id = OU.Id
WHERE
OU.[Status] = 2 -- Confirmed
UPDATE
U
SET
U.[AccountRevisionDate] = GETUTCDATE()
FROM
[dbo].[User] U
INNER JOIN
#UserIds ON U.[Id] = #UserIds.[UserId]
END
GO
-- Create TwoGuidIdArray Type
IF NOT EXISTS (
SELECT
*
FROM
sys.types
WHERE
[Name] = 'TwoGuidIdArray' AND
is_user_defined = 1
)
CREATE TYPE [dbo].[TwoGuidIdArray] AS TABLE (
[Id1] UNIQUEIDENTIFIER NOT NULL,
[Id2] UNIQUEIDENTIFIER NOT NULL);
GO
-- Create sproc to delete batch of users
-- Parameter Ids are UserId, OrganizationId
IF OBJECT_ID('[dbo].[SsoUser_DeleteMany]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[SsoUser_DeleteMany]
END
GO
CREATE PROCEDURE [dbo].[SsoUser_DeleteMany]
@UserAndOrganizationIds [dbo].[TwoGuidIdArray] READONLY
AS
BEGIN
SET NOCOUNT ON
SELECT
Id
INTO
#SSOIds
FROM
[dbo].[SsoUser] SU
INNER JOIN
@UserAndOrganizationIds UOI ON UOI.Id1 = SU.UserId AND UOI.Id2 = SU.OrganizationId
DECLARE @BatchSize INT = 100
-- Delete SSO Users
WHILE @BatchSize > 0
BEGIN
BEGIN TRANSACTION SsoUser_DeleteMany_SsoUsers
DELETE TOP(@BatchSize) SU
FROM
[dbo].[SsoUser] SU
INNER JOIN
#SSOIDs ON #SSOIds.Id = SU.Id
SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION SsoUser_DeleteMany_SsoUsers
END
END
GO
-- Create OrganizationUser Delete many by Id procedure
IF OBJECT_ID('[dbo].[OrganizationUser_DeleteByIds]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[OrganizationUser_DeleteByIds]
END
GO
CREATE PROCEDURE [dbo].[OrganizationUser_DeleteByIds]
@Ids [dbo].[GuidIdArray] READONLY
AS
BEGIN
SET NOCOUNT ON
EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds] @Ids
DECLARE @UserAndOrganizationIds [dbo].[TwoGuidIdArray]
INSERT INTO @UserAndOrganizationIds
(Id1, Id2)
SELECT
UserId,
OrganizationId
FROM
[dbo].[OrganizationUser] OU
INNER JOIN
@Ids OUIds ON OUIds.Id = OU.Id
WHERE
UserId IS NOT NULL AND
OrganizationId IS NOT NULL
BEGIN
EXEC [dbo].[SsoUser_DeleteMany] @UserAndOrganizationIds
END
DECLARE @BatchSize INT = 100
-- Delete CollectionUsers
WHILE @BatchSize > 0
BEGIN
BEGIN TRANSACTION CollectionUser_DeleteMany_CUs
DELETE TOP(@BatchSize) CU
FROM
[dbo].[CollectionUser] CU
INNER JOIN
@Ids I ON I.Id = CU.OrganizationUserId
SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION CollectionUser_DeleteMany_CUs
END
SET @BatchSize = 100;
-- Delete GroupUsers
WHILE @BatchSize > 0
BEGIN
BEGIN TRANSACTION GroupUser_DeleteMany_GroupUsers
DELETE TOP(@BatchSize) GU
FROM
[dbo].[GroupUser] GU
INNER JOIN
@Ids I ON I.Id = GU.OrganizationUserId
SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION GoupUser_DeleteMany_GroupUsers
END
SET @BatchSize = 100;
-- Delete OrganizationUsers
WHILE @BatchSize > 0
BEGIN
BEGIN TRANSACTION OrganizationUser_DeleteMany_OUs
DELETE TOP(@BatchSize) OU
FROM
[dbo].[OrganizationUser] OU
INNER JOIN
@Ids I ON I.Id = OU.Id
SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION OrganizationUser_DeleteMany_OUs
END
END
GO