fix la maj des participants et des propositions
This commit is contained in:
18
fix-propositions-update-policy.sql
Normal file
18
fix-propositions-update-policy.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
-- Script pour corriger les politiques RLS manquantes pour les mises à jour
|
||||
-- À exécuter dans l'interface SQL de Supabase
|
||||
|
||||
-- Ajouter la politique manquante pour les mises à jour des propositions
|
||||
CREATE POLICY "Allow public update access to propositions" ON propositions FOR UPDATE USING (true);
|
||||
|
||||
-- Ajouter la politique manquante pour les mises à jour des participants
|
||||
CREATE POLICY "Allow public update access to participants" ON participants FOR UPDATE USING (true);
|
||||
|
||||
-- Vérifier que toutes les politiques sont en place pour les propositions
|
||||
SELECT schemaname, tablename, policyname, permissive, roles, cmd, qual, with_check
|
||||
FROM pg_policies
|
||||
WHERE tablename = 'propositions';
|
||||
|
||||
-- Vérifier que toutes les politiques sont en place pour les participants
|
||||
SELECT schemaname, tablename, policyname, permissive, roles, cmd, qual, with_check
|
||||
FROM pg_policies
|
||||
WHERE tablename = 'participants';
|
||||
@@ -42,9 +42,10 @@ export default function AddParticipantModal({ isOpen, onClose, onSuccess, campai
|
||||
last_name: '',
|
||||
email: ''
|
||||
});
|
||||
} catch (err) {
|
||||
setError('Erreur lors de l\'ajout du participant');
|
||||
console.error(err);
|
||||
} catch (err: any) {
|
||||
const errorMessage = err?.message || err?.details || 'Erreur lors de l\'ajout du participant';
|
||||
setError(`Erreur lors de l'ajout du participant: ${errorMessage}`);
|
||||
console.error('Erreur lors de l\'ajout du participant:', err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@@ -48,9 +48,10 @@ export default function AddPropositionModal({ isOpen, onClose, onSuccess, campai
|
||||
author_last_name: 'admin',
|
||||
author_email: 'admin@example.com'
|
||||
});
|
||||
} catch (err) {
|
||||
setError('Erreur lors de la création de la proposition');
|
||||
console.error(err);
|
||||
} catch (err: any) {
|
||||
const errorMessage = err?.message || err?.details || 'Erreur lors de la création de la proposition';
|
||||
setError(`Erreur lors de la création de la proposition: ${errorMessage}`);
|
||||
console.error('Erreur lors de la création de la proposition:', err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,10 @@ export default function DeleteParticipantModal({ isOpen, onClose, onSuccess, par
|
||||
try {
|
||||
await participantService.delete(participant.id);
|
||||
onSuccess();
|
||||
} catch (err) {
|
||||
setError('Erreur lors de la suppression du participant');
|
||||
console.error(err);
|
||||
} catch (err: any) {
|
||||
const errorMessage = err?.message || err?.details || 'Erreur lors de la suppression du participant';
|
||||
setError(`Erreur lors de la suppression du participant: ${errorMessage}`);
|
||||
console.error('Erreur lors de la suppression du participant:', err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,10 @@ export default function DeletePropositionModal({ isOpen, onClose, onSuccess, pro
|
||||
try {
|
||||
await propositionService.delete(proposition.id);
|
||||
onSuccess();
|
||||
} catch (err) {
|
||||
setError('Erreur lors de la suppression de la proposition');
|
||||
console.error(err);
|
||||
} catch (err: any) {
|
||||
const errorMessage = err?.message || err?.details || 'Erreur lors de la suppression de la proposition';
|
||||
setError(`Erreur lors de la suppression de la proposition: ${errorMessage}`);
|
||||
console.error('Erreur lors de la suppression de la proposition:', err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@@ -48,9 +48,10 @@ export default function EditParticipantModal({ isOpen, onClose, onSuccess, parti
|
||||
});
|
||||
|
||||
onSuccess();
|
||||
} catch (err) {
|
||||
setError('Erreur lors de la modification du participant');
|
||||
console.error(err);
|
||||
} catch (err: any) {
|
||||
const errorMessage = err?.message || err?.details || 'Erreur lors de la modification du participant';
|
||||
setError(`Erreur lors de la modification du participant: ${errorMessage}`);
|
||||
console.error('Erreur lors de la modification du participant:', err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@@ -55,9 +55,10 @@ export default function EditPropositionModal({ isOpen, onClose, onSuccess, propo
|
||||
});
|
||||
|
||||
onSuccess();
|
||||
} catch (err) {
|
||||
setError('Erreur lors de la modification de la proposition');
|
||||
console.error(err);
|
||||
} catch (err: any) {
|
||||
const errorMessage = err?.message || err?.details || 'Erreur lors de la modification de la proposition';
|
||||
setError(`Erreur lors de la modification de la proposition: ${errorMessage}`);
|
||||
console.error('Erreur lors de la modification de la proposition:', err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@@ -107,15 +107,32 @@ export const propositionService = {
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
async update(id: string, updates: any): Promise<Proposition> {
|
||||
const { data, error } = await supabase
|
||||
.from('propositions')
|
||||
.update(updates)
|
||||
.eq('id', id)
|
||||
.select()
|
||||
.single();
|
||||
try {
|
||||
// Effectuer la mise à jour directement
|
||||
const { data, error } = await supabase
|
||||
.from('propositions')
|
||||
.update(updates)
|
||||
.eq('id', id)
|
||||
.select('*')
|
||||
.single();
|
||||
|
||||
if (error) throw error;
|
||||
return data;
|
||||
if (error) {
|
||||
console.error('Erreur Supabase lors de la mise à jour:', error);
|
||||
if (error.code === 'PGRST116') {
|
||||
throw new Error(`Proposition avec l'ID ${id} non trouvée`);
|
||||
}
|
||||
throw new Error(`Erreur lors de la mise à jour: ${error.message || 'Erreur inconnue'}`);
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
throw new Error('Aucune donnée retournée après la mise à jour');
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Erreur dans propositionService.update:', error);
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
|
||||
async delete(id: string): Promise<void> {
|
||||
@@ -155,15 +172,32 @@ export const participantService = {
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
async update(id: string, updates: any): Promise<Participant> {
|
||||
const { data, error } = await supabase
|
||||
.from('participants')
|
||||
.update(updates)
|
||||
.eq('id', id)
|
||||
.select()
|
||||
.single();
|
||||
try {
|
||||
// Effectuer la mise à jour directement
|
||||
const { data, error } = await supabase
|
||||
.from('participants')
|
||||
.update(updates)
|
||||
.eq('id', id)
|
||||
.select('*')
|
||||
.single();
|
||||
|
||||
if (error) throw error;
|
||||
return data;
|
||||
if (error) {
|
||||
console.error('Erreur Supabase lors de la mise à jour du participant:', error);
|
||||
if (error.code === 'PGRST116') {
|
||||
throw new Error(`Participant avec l'ID ${id} non trouvé`);
|
||||
}
|
||||
throw new Error(`Erreur lors de la mise à jour du participant: ${error.message || 'Erreur inconnue'}`);
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
throw new Error('Aucune donnée retournée après la mise à jour du participant');
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Erreur dans participantService.update:', error);
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
|
||||
async delete(id: string): Promise<void> {
|
||||
|
||||
@@ -101,10 +101,12 @@ CREATE POLICY "Allow public delete access to campaigns" ON campaigns FOR DELETE
|
||||
|
||||
CREATE POLICY "Allow public read access to propositions" ON propositions FOR SELECT USING (true);
|
||||
CREATE POLICY "Allow public insert access to propositions" ON propositions FOR INSERT WITH CHECK (true);
|
||||
CREATE POLICY "Allow public update access to propositions" ON propositions FOR UPDATE USING (true);
|
||||
CREATE POLICY "Allow public delete access to propositions" ON propositions FOR DELETE USING (true);
|
||||
|
||||
CREATE POLICY "Allow public read access to participants" ON participants FOR SELECT USING (true);
|
||||
CREATE POLICY "Allow public insert access to participants" ON participants FOR INSERT WITH CHECK (true);
|
||||
CREATE POLICY "Allow public update access to participants" ON participants FOR UPDATE USING (true);
|
||||
CREATE POLICY "Allow public delete access to participants" ON participants FOR DELETE USING (true);
|
||||
|
||||
CREATE POLICY "Allow public read access to votes" ON votes FOR SELECT USING (true);
|
||||
|
||||
Reference in New Issue
Block a user