mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-16 19:00:38 +09:00
58 lines
1.5 KiB
MySQL
58 lines
1.5 KiB
MySQL
|
|
WITH ranked_user_requests AS (
|
||
|
|
SELECT
|
||
|
|
id,
|
||
|
|
row_number() OVER (
|
||
|
|
PARTITION BY company_id, requesting_user_id
|
||
|
|
ORDER BY created_at ASC, id ASC
|
||
|
|
) AS rank
|
||
|
|
FROM join_requests
|
||
|
|
WHERE request_type = 'human'
|
||
|
|
AND status = 'pending_approval'
|
||
|
|
AND requesting_user_id IS NOT NULL
|
||
|
|
)
|
||
|
|
UPDATE join_requests
|
||
|
|
SET
|
||
|
|
status = 'rejected',
|
||
|
|
rejected_at = COALESCE(rejected_at, now()),
|
||
|
|
updated_at = now()
|
||
|
|
WHERE id IN (
|
||
|
|
SELECT id
|
||
|
|
FROM ranked_user_requests
|
||
|
|
WHERE rank > 1
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
WITH ranked_email_requests AS (
|
||
|
|
SELECT
|
||
|
|
id,
|
||
|
|
row_number() OVER (
|
||
|
|
PARTITION BY company_id, lower(request_email_snapshot)
|
||
|
|
ORDER BY created_at ASC, id ASC
|
||
|
|
) AS rank
|
||
|
|
FROM join_requests
|
||
|
|
WHERE request_type = 'human'
|
||
|
|
AND status = 'pending_approval'
|
||
|
|
AND request_email_snapshot IS NOT NULL
|
||
|
|
)
|
||
|
|
UPDATE join_requests
|
||
|
|
SET
|
||
|
|
status = 'rejected',
|
||
|
|
rejected_at = COALESCE(rejected_at, now()),
|
||
|
|
updated_at = now()
|
||
|
|
WHERE id IN (
|
||
|
|
SELECT id
|
||
|
|
FROM ranked_email_requests
|
||
|
|
WHERE rank > 1
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "join_requests_pending_human_user_uq"
|
||
|
|
ON "join_requests" USING btree ("company_id", "requesting_user_id")
|
||
|
|
WHERE "request_type" = 'human'
|
||
|
|
AND "status" = 'pending_approval'
|
||
|
|
AND "requesting_user_id" IS NOT NULL;
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "join_requests_pending_human_email_uq"
|
||
|
|
ON "join_requests" USING btree ("company_id", lower("request_email_snapshot"))
|
||
|
|
WHERE "request_type" = 'human'
|
||
|
|
AND "status" = 'pending_approval'
|
||
|
|
AND "request_email_snapshot" IS NOT NULL;
|