Perplexica/supabase/migrations/20240107_review_claim_function.sql
2025-01-06 21:24:54 -07:00

63 lines
No EOL
2 KiB
PL/PgSQL

-- Function to review business claims
CREATE OR REPLACE FUNCTION review_business_claim(
p_claim_id UUID,
p_business_id TEXT,
p_user_id UUID,
p_status TEXT,
p_notes TEXT DEFAULT NULL
) RETURNS void AS $$
BEGIN
-- Start transaction
BEGIN
-- Update claim status
UPDATE public.business_claims
SET
status = p_status,
reviewed_at = CURRENT_TIMESTAMP,
reviewed_by = p_user_id,
notes = COALESCE(p_notes, notes)
WHERE id = p_claim_id;
-- If approved, update business profile
IF p_status = 'approved' THEN
-- Get the user_id from the claim
WITH claim_user AS (
SELECT user_id
FROM public.business_claims
WHERE id = p_claim_id
)
INSERT INTO public.business_profiles (
business_id,
claimed_by,
claimed_at,
verification_status
)
SELECT
p_business_id,
user_id,
CURRENT_TIMESTAMP,
'verified'
FROM claim_user
ON CONFLICT (business_id)
DO UPDATE SET
claimed_by = EXCLUDED.claimed_by,
claimed_at = EXCLUDED.claimed_at,
verification_status = EXCLUDED.verification_status;
END IF;
-- Reject any other pending claims for this business
IF p_status = 'approved' THEN
UPDATE public.business_claims
SET
status = 'rejected',
reviewed_at = CURRENT_TIMESTAMP,
reviewed_by = p_user_id,
notes = COALESCE(notes, '') || E'\nAutomatically rejected due to another approved claim.'
WHERE
business_id = p_business_id
AND id != p_claim_id
AND status = 'pending';
END IF;
END;
END;
$$ LANGUAGE plpgsql;