mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:51:12 -05:00
49 lines
1.8 KiB
PL/PgSQL
49 lines
1.8 KiB
PL/PgSQL
-- =====================================================
|
|
-- Automatic Cleanup of Temporary References
|
|
-- =====================================================
|
|
-- Trigger to delete submission_item_temp_refs when items are approved
|
|
-- This acts as a safety net if edge function cleanup fails
|
|
|
|
-- Function to cleanup temp refs on approval
|
|
CREATE OR REPLACE FUNCTION public.cleanup_temp_refs_on_approval()
|
|
RETURNS TRIGGER
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path TO 'public'
|
|
AS $function$
|
|
DECLARE
|
|
v_deleted_count INTEGER;
|
|
BEGIN
|
|
-- Only cleanup when status changes to approved
|
|
IF NEW.status = 'approved' AND OLD.status != 'approved' THEN
|
|
-- Delete all temp refs for this submission item
|
|
DELETE FROM public.submission_item_temp_refs
|
|
WHERE submission_item_id = NEW.id;
|
|
|
|
GET DIAGNOSTICS v_deleted_count = ROW_COUNT;
|
|
|
|
IF v_deleted_count > 0 THEN
|
|
RAISE NOTICE 'Cleaned up % temp refs for submission_item %', v_deleted_count, NEW.id;
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN NEW;
|
|
EXCEPTION WHEN OTHERS THEN
|
|
-- Log but don't block the approval
|
|
RAISE NOTICE 'Failed to cleanup temp refs for item %: %', NEW.id, SQLERRM;
|
|
RETURN NEW;
|
|
END;
|
|
$function$;
|
|
|
|
-- Create trigger on submission_items
|
|
CREATE TRIGGER trigger_cleanup_temp_refs_on_approval
|
|
AFTER UPDATE OF status ON public.submission_items
|
|
FOR EACH ROW
|
|
WHEN (NEW.status = 'approved' AND OLD.status IS DISTINCT FROM 'approved')
|
|
EXECUTE FUNCTION public.cleanup_temp_refs_on_approval();
|
|
|
|
COMMENT ON FUNCTION public.cleanup_temp_refs_on_approval() IS
|
|
'Automatically deletes temporary reference records when submission items are approved. Acts as safety net for edge function cleanup.';
|
|
|
|
COMMENT ON TRIGGER trigger_cleanup_temp_refs_on_approval ON public.submission_items IS
|
|
'Ensures temp refs are cleaned up even if edge function cleanup fails'; |