mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:51:12 -05:00
57 lines
1.5 KiB
PL/PgSQL
57 lines
1.5 KiB
PL/PgSQL
-- Update claim_specific_submission function to bypass RLS
|
|
CREATE OR REPLACE FUNCTION public.claim_specific_submission(
|
|
p_submission_id UUID,
|
|
p_moderator_id UUID,
|
|
p_lock_duration INTERVAL DEFAULT '15 minutes'
|
|
) RETURNS BOOLEAN
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
DECLARE
|
|
rows_updated INTEGER;
|
|
BEGIN
|
|
-- Temporarily disable RLS for this transaction
|
|
SET LOCAL row_security = off;
|
|
|
|
-- Atomically update the submission if it's unclaimed or lock expired
|
|
UPDATE content_submissions
|
|
SET
|
|
assigned_to = p_moderator_id,
|
|
assigned_at = NOW(),
|
|
locked_until = NOW() + p_lock_duration,
|
|
first_reviewed_at = COALESCE(first_reviewed_at, NOW())
|
|
WHERE id = p_submission_id
|
|
AND (
|
|
assigned_to IS NULL
|
|
OR locked_until < NOW()
|
|
)
|
|
AND status = 'pending';
|
|
|
|
GET DIAGNOSTICS rows_updated = ROW_COUNT;
|
|
|
|
-- Re-enable RLS (will auto-reset at end of transaction anyway)
|
|
SET LOCAL row_security = on;
|
|
|
|
-- Log the action if successful
|
|
IF rows_updated > 0 THEN
|
|
BEGIN
|
|
PERFORM log_admin_action(
|
|
p_moderator_id,
|
|
(SELECT user_id FROM content_submissions WHERE id = p_submission_id),
|
|
'submission_claimed',
|
|
jsonb_build_object(
|
|
'submission_id', p_submission_id,
|
|
'claim_type', 'specific'
|
|
)
|
|
);
|
|
EXCEPTION WHEN OTHERS THEN
|
|
RAISE WARNING 'Failed to log submission claim audit: %', SQLERRM;
|
|
END;
|
|
|
|
RETURN TRUE;
|
|
END IF;
|
|
|
|
RETURN FALSE;
|
|
END;
|
|
$$; |