forked from baron/baron-sso
테넌트 목록 조회 cursor기반으로 재구성. 사용자 metadata 미사용 필드 제거
This commit is contained in:
67
scripts/clear_orphan_user_tenant_memberships.sql
Normal file
67
scripts/clear_orphan_user_tenant_memberships.sql
Normal file
@@ -0,0 +1,67 @@
|
||||
-- 삭제되었거나 존재하지 않는 tenant를 가리키는 사용자 소속정보를 정리한다.
|
||||
-- 실행 예:
|
||||
-- docker exec -i baron_postgres psql -U baron -d baron_sso < scripts/clear_orphan_user_tenant_memberships.sql
|
||||
|
||||
BEGIN;
|
||||
|
||||
WITH orphan_users AS (
|
||||
SELECT
|
||||
u.id,
|
||||
u.email,
|
||||
u.tenant_id,
|
||||
u.company_code,
|
||||
u.company_codes
|
||||
FROM users AS u
|
||||
WHERE u.deleted_at IS NULL
|
||||
AND (
|
||||
(
|
||||
u.tenant_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM tenants AS t
|
||||
WHERE t.id = u.tenant_id
|
||||
AND t.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
OR (
|
||||
NULLIF(BTRIM(u.company_code), '') IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM tenants AS t
|
||||
WHERE LOWER(t.slug) = LOWER(BTRIM(u.company_code))
|
||||
AND t.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM UNNEST(COALESCE(u.company_codes, ARRAY[]::text[])) AS code(value)
|
||||
WHERE NULLIF(BTRIM(code.value), '') IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM tenants AS t
|
||||
WHERE LOWER(t.slug) = LOWER(BTRIM(code.value))
|
||||
AND t.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
updated_users AS (
|
||||
UPDATE users AS u
|
||||
SET tenant_id = NULL,
|
||||
company_code = '',
|
||||
company_codes = NULL,
|
||||
updated_at = NOW()
|
||||
FROM orphan_users AS ou
|
||||
WHERE u.id = ou.id
|
||||
RETURNING
|
||||
u.id,
|
||||
u.email,
|
||||
ou.tenant_id AS cleared_tenant_id,
|
||||
ou.company_code AS cleared_company_code,
|
||||
ou.company_codes AS cleared_company_codes
|
||||
)
|
||||
SELECT *
|
||||
FROM updated_users
|
||||
ORDER BY email;
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user