-- Script pour appliquer la fonction replace_participant_votes -- À exécuter dans votre base de données Supabase -- Fonction pour remplacer tous les votes d'un participant de manière atomique CREATE OR REPLACE FUNCTION replace_participant_votes( p_campaign_id UUID, p_participant_id UUID, p_votes JSONB ) RETURNS VOID AS $$ DECLARE vote_record RECORD; BEGIN -- Commencer une transaction BEGIN -- Supprimer tous les votes existants pour ce participant dans cette campagne DELETE FROM votes WHERE campaign_id = p_campaign_id AND participant_id = p_participant_id; -- Insérer les nouveaux votes FOR vote_record IN SELECT * FROM jsonb_array_elements(p_votes) LOOP INSERT INTO votes (campaign_id, participant_id, proposition_id, amount) VALUES ( p_campaign_id, p_participant_id, (vote_record.value->>'proposition_id')::UUID, (vote_record.value->>'amount')::INTEGER ); END LOOP; -- La transaction sera automatiquement commitée si tout va bien EXCEPTION WHEN OTHERS THEN -- En cas d'erreur, la transaction sera automatiquement rollbackée RAISE EXCEPTION 'Erreur lors du remplacement des votes: %', SQLERRM; END; END; $$ LANGUAGE plpgsql SECURITY DEFINER;