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: '',
|
last_name: '',
|
||||||
email: ''
|
email: ''
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
setError('Erreur lors de l\'ajout du participant');
|
const errorMessage = err?.message || err?.details || 'Erreur lors de l\'ajout du participant';
|
||||||
console.error(err);
|
setError(`Erreur lors de l'ajout du participant: ${errorMessage}`);
|
||||||
|
console.error('Erreur lors de l\'ajout du participant:', err);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,9 +48,10 @@ export default function AddPropositionModal({ isOpen, onClose, onSuccess, campai
|
|||||||
author_last_name: 'admin',
|
author_last_name: 'admin',
|
||||||
author_email: 'admin@example.com'
|
author_email: 'admin@example.com'
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
setError('Erreur lors de la création de la proposition');
|
const errorMessage = err?.message || err?.details || 'Erreur lors de la création de la proposition';
|
||||||
console.error(err);
|
setError(`Erreur lors de la création de la proposition: ${errorMessage}`);
|
||||||
|
console.error('Erreur lors de la création de la proposition:', err);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,9 +26,10 @@ export default function DeleteParticipantModal({ isOpen, onClose, onSuccess, par
|
|||||||
try {
|
try {
|
||||||
await participantService.delete(participant.id);
|
await participantService.delete(participant.id);
|
||||||
onSuccess();
|
onSuccess();
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
setError('Erreur lors de la suppression du participant');
|
const errorMessage = err?.message || err?.details || 'Erreur lors de la suppression du participant';
|
||||||
console.error(err);
|
setError(`Erreur lors de la suppression du participant: ${errorMessage}`);
|
||||||
|
console.error('Erreur lors de la suppression du participant:', err);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,9 +26,10 @@ export default function DeletePropositionModal({ isOpen, onClose, onSuccess, pro
|
|||||||
try {
|
try {
|
||||||
await propositionService.delete(proposition.id);
|
await propositionService.delete(proposition.id);
|
||||||
onSuccess();
|
onSuccess();
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
setError('Erreur lors de la suppression de la proposition');
|
const errorMessage = err?.message || err?.details || 'Erreur lors de la suppression de la proposition';
|
||||||
console.error(err);
|
setError(`Erreur lors de la suppression de la proposition: ${errorMessage}`);
|
||||||
|
console.error('Erreur lors de la suppression de la proposition:', err);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,9 +48,10 @@ export default function EditParticipantModal({ isOpen, onClose, onSuccess, parti
|
|||||||
});
|
});
|
||||||
|
|
||||||
onSuccess();
|
onSuccess();
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
setError('Erreur lors de la modification du participant');
|
const errorMessage = err?.message || err?.details || 'Erreur lors de la modification du participant';
|
||||||
console.error(err);
|
setError(`Erreur lors de la modification du participant: ${errorMessage}`);
|
||||||
|
console.error('Erreur lors de la modification du participant:', err);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,9 +55,10 @@ export default function EditPropositionModal({ isOpen, onClose, onSuccess, propo
|
|||||||
});
|
});
|
||||||
|
|
||||||
onSuccess();
|
onSuccess();
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
setError('Erreur lors de la modification de la proposition');
|
const errorMessage = err?.message || err?.details || 'Erreur lors de la modification de la proposition';
|
||||||
console.error(err);
|
setError(`Erreur lors de la modification de la proposition: ${errorMessage}`);
|
||||||
|
console.error('Erreur lors de la modification de la proposition:', err);
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,15 +107,32 @@ export const propositionService = {
|
|||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
async update(id: string, updates: any): Promise<Proposition> {
|
async update(id: string, updates: any): Promise<Proposition> {
|
||||||
|
try {
|
||||||
|
// Effectuer la mise à jour directement
|
||||||
const { data, error } = await supabase
|
const { data, error } = await supabase
|
||||||
.from('propositions')
|
.from('propositions')
|
||||||
.update(updates)
|
.update(updates)
|
||||||
.eq('id', id)
|
.eq('id', id)
|
||||||
.select()
|
.select('*')
|
||||||
.single();
|
.single();
|
||||||
|
|
||||||
if (error) throw error;
|
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;
|
return data;
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error('Erreur dans propositionService.update:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async delete(id: string): Promise<void> {
|
async delete(id: string): Promise<void> {
|
||||||
@@ -155,15 +172,32 @@ export const participantService = {
|
|||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
async update(id: string, updates: any): Promise<Participant> {
|
async update(id: string, updates: any): Promise<Participant> {
|
||||||
|
try {
|
||||||
|
// Effectuer la mise à jour directement
|
||||||
const { data, error } = await supabase
|
const { data, error } = await supabase
|
||||||
.from('participants')
|
.from('participants')
|
||||||
.update(updates)
|
.update(updates)
|
||||||
.eq('id', id)
|
.eq('id', id)
|
||||||
.select()
|
.select('*')
|
||||||
.single();
|
.single();
|
||||||
|
|
||||||
if (error) throw error;
|
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;
|
return data;
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error('Erreur dans participantService.update:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async delete(id: string): Promise<void> {
|
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 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 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 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 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 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 delete access to participants" ON participants FOR DELETE USING (true);
|
||||||
|
|
||||||
CREATE POLICY "Allow public read access to votes" ON votes FOR SELECT USING (true);
|
CREATE POLICY "Allow public read access to votes" ON votes FOR SELECT USING (true);
|
||||||
|
|||||||
Reference in New Issue
Block a user