uodate doc and cleaning

This commit is contained in:
Yannick Le Duc
2025-08-25 18:37:44 +02:00
parent b0a945f07b
commit 535a39674c
4 changed files with 46 additions and 150 deletions

100
DEBUG.md
View File

@@ -1,100 +0,0 @@
# Guide de Débogage - Problème de Suppression
## 🔍 Étapes de débogage
### 1. Vérifier les variables d'environnement
Assurez-vous que votre fichier `.env.local` contient les bonnes valeurs :
```env
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-here
```
### 2. Vérifier la console du navigateur
1. Ouvrez les outils de développement (F12)
2. Allez dans l'onglet "Console"
3. Essayez de supprimer une campagne
4. Regardez les logs qui s'affichent
Vous devriez voir :
- "Début de la suppression de la campagne: [ID]"
- "Tentative de suppression de la campagne: [ID]"
- "Campagne supprimée avec succès"
- "handleCampaignDeleted appelé"
- "Rechargement des campagnes..."
### 3. Vérifier les politiques RLS dans Supabase
Dans votre projet Supabase, allez dans **Authentication > Policies** et vérifiez que vous avez bien :
```sql
CREATE POLICY "Allow public delete access to campaigns" ON campaigns FOR DELETE USING (true);
```
### 4. Tester la suppression directement dans Supabase
1. Allez dans **Table Editor** dans Supabase
2. Sélectionnez la table `campaigns`
3. Essayez de supprimer une ligne manuellement
4. Vérifiez s'il y a des erreurs
### 5. Vérifier les contraintes de clés étrangères
Assurez-vous que les tables ont bien les contraintes `ON DELETE CASCADE` :
```sql
campaign_id UUID NOT NULL REFERENCES campaigns(id) ON DELETE CASCADE
```
## 🚨 Problèmes courants
### Problème 1 : Variables d'environnement manquantes
**Symptôme** : Erreur "supabaseUrl is required"
**Solution** : Vérifiez votre fichier `.env.local`
### Problème 2 : Politiques RLS manquantes
**Symptôme** : Erreur "new row violates row-level security policy"
**Solution** : Ajoutez la politique de suppression dans Supabase
### Problème 3 : Contraintes de clés étrangères
**Symptôme** : Erreur de contrainte lors de la suppression
**Solution** : Vérifiez que les contraintes CASCADE sont bien définies
### Problème 4 : Connexion Supabase
**Symptôme** : Erreur de connexion
**Solution** : Vérifiez l'URL et la clé anon de Supabase
## 🔧 Solutions rapides
### Réinitialiser les politiques RLS
```sql
-- Supprimer toutes les politiques existantes
DROP POLICY IF EXISTS "Allow public read access to campaigns" ON campaigns;
DROP POLICY IF EXISTS "Allow public insert access to campaigns" ON campaigns;
DROP POLICY IF EXISTS "Allow public update access to campaigns" ON campaigns;
DROP POLICY IF EXISTS "Allow public delete access to campaigns" ON campaigns;
-- Recréer les politiques
CREATE POLICY "Allow public read access to campaigns" ON campaigns FOR SELECT USING (true);
CREATE POLICY "Allow public insert access to campaigns" ON campaigns FOR INSERT WITH CHECK (true);
CREATE POLICY "Allow public update access to campaigns" ON campaigns FOR UPDATE USING (true);
CREATE POLICY "Allow public delete access to campaigns" ON campaigns FOR DELETE USING (true);
```
### Vérifier la configuration Supabase
```javascript
// Dans la console du navigateur, testez :
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY);
console.log('Supabase URL:', process.env.NEXT_PUBLIC_SUPABASE_URL);
```
## 📞 Support
Si le problème persiste, vérifiez :
1. Les logs dans la console du navigateur
2. Les logs dans Supabase (Dashboard > Logs)
3. Les politiques RLS dans Supabase
4. La configuration des variables d'environnement

View File

@@ -4,10 +4,11 @@ Une application web moderne pour gérer des campagnes de budgets participatifs,
## 🚀 Technologies utilisées
- **Frontend**: Next.js 14 avec TypeScript et App Router
- **UI/UX**: Tailwind CSS + Shadcn/ui + Lucide React
- **Frontend**: Next.js 15 avec TypeScript et App Router
- **UI/UX**: Tailwind CSS 4 + Shadcn/ui + Lucide React
- **Base de données**: PostgreSQL via Supabase
- **Authentification**: Supabase Auth (implémenté)
- **Authentification**: Supabase Auth
- **Email**: Nodemailer avec support SMTP
- **Déploiement**: Compatible Vercel, Netlify, etc.
## 📋 Fonctionnalités
@@ -54,6 +55,12 @@ Une application web moderne pour gérer des campagnes de budgets participatifs,
- Validation du budget total
- Sauvegarde des votes
#### 📧 **Système d'email**
- **Configuration SMTP** : Interface d'administration pour configurer les paramètres email
- **Envoi d'emails** : Notifications aux participants
- **Test d'envoi** : Fonctionnalité de test des paramètres SMTP
- **Templates personnalisables** : Messages d'email configurables
#### 🎨 **Interface moderne**
- **Shadcn/ui** : Composants modernes et accessibles
- **Design responsive** : Adaptation mobile/desktop
@@ -155,6 +162,12 @@ L'application sera accessible sur `http://localhost:3000`
- `created_at`: Date de création
- `updated_at`: Date de dernière modification
### Table `settings`
- `key`: Clé de configuration
- `value`: Valeur de configuration
- `category`: Catégorie (email, general, etc.)
- `description`: Description de la configuration
## 🎨 Interface utilisateur
### Page d'accueil
@@ -167,6 +180,7 @@ L'application sera accessible sur `http://localhost:3000`
- **Gestion des campagnes** : CRUD complet avec interface moderne
- **Navigation fluide** : Liens vers les pages de gestion détaillées
- **Recherche** : Filtrage en temps réel des campagnes
- **Paramètres** : Configuration SMTP et autres paramètres
### Pages de gestion détaillées
- **Propositions** : Interface complète avec avatars et informations détaillées
@@ -186,7 +200,12 @@ src/
│ ├── page.tsx # Page d'accueil
│ ├── admin/ # Pages d'administration (protégées)
│ │ ├── page.tsx # Dashboard principal
│ │ ├── settings/ # Paramètres SMTP
│ │ └── campaigns/[id]/ # Pages de gestion par campagne
│ ├── api/ # API Routes
│ │ ├── send-participant-email/
│ │ ├── test-email/
│ │ └── test-smtp/
│ └── campaigns/[id]/ # Pages publiques
│ ├── propose/ # Dépôt de propositions
│ └── vote/[participantId] # Vote public
@@ -194,10 +213,13 @@ src/
│ ├── ui/ # Composants Shadcn/ui
│ ├── AuthGuard.tsx # Protection des routes
│ ├── Navigation.tsx # Navigation principale
│ ├── SmtpSettingsForm.tsx # Configuration SMTP
│ └── [Modals] # Modales de gestion
├── lib/ # Services et configuration
│ ├── supabase.ts # Configuration Supabase
│ ├── services.ts # Services de données
│ ├── email.ts # Service d'envoi d'emails
│ ├── encryption.ts # Chiffrement des données sensibles
│ └── utils.ts # Utilitaires
└── types/ # Types TypeScript
└── index.ts # Définitions des types
@@ -208,12 +230,19 @@ src/
- **propositionService** : CRUD des propositions
- **participantService** : CRUD des participants
- **voteService** : Gestion des votes et statuts
- **settingsService** : Gestion des paramètres de configuration
### Authentification
- **AuthGuard** : Composant de protection des routes
- **Supabase Auth** : Authentification sécurisée
- **Session management** : Gestion des sessions utilisateur
### Système d'email
- **Configuration SMTP** : Interface d'administration
- **Envoi d'emails** : Service Nodemailer
- **Chiffrement** : Protection des mots de passe SMTP
- **Templates** : Messages personnalisables
## 🚀 Déploiement
### Vercel (recommandé)
@@ -246,13 +275,19 @@ L'application peut être déployée sur n'importe quelle plateforme supportant N
- **Validation côté serveur** : Vérification des données avant sauvegarde
- **URLs sécurisées** : Liens publics avec identifiants uniques
### Données sensibles
- **Chiffrement SMTP** : Mots de passe SMTP chiffrés en base
- **Variables d'environnement** : Configuration sécurisée
- **Validation des entrées** : Protection contre les injections
## 🎯 Workflow d'utilisation
### 1. Configuration initiale
1. Créer un compte Supabase
2. Configurer la base de données
3. Créer un utilisateur admin
4. Déployer l'application
4. Configurer les paramètres SMTP (optionnel)
5. Déployer l'application
### 2. Création d'une campagne
1. Se connecter à l'administration
@@ -270,12 +305,18 @@ L'application peut être déployée sur n'importe quelle plateforme supportant N
2. Passer en mode "En cours de vote"
3. Partager les liens de vote personnels
4. Suivre la participation en temps réel
5. Envoyer des rappels par email (optionnel)
### 5. Résultats
1. Consulter les statistiques de vote
2. Analyser les résultats
3. Clôturer la campagne
## 📚 Documentation supplémentaire
- **SETUP.md** : Guide de configuration détaillé
- **SETTINGS.md** : Documentation des paramètres et configurations
## 🤝 Contribution
1. Fork le projet
@@ -299,4 +340,4 @@ Pour toute question ou problème :
**Développé avec ❤️ pour faciliter la démocratie participative**
*Application complète et prête pour la production avec authentification, interface moderne et toutes les fonctionnalités de gestion de budgets participatifs.*
*Application complète et prête pour la production avec authentification, interface moderne, système d'email et toutes les fonctionnalités de gestion de budgets participatifs.*

View File

@@ -1,31 +0,0 @@
-- Migration pour ajouter les paramètres SMTP
-- À exécuter dans l'éditeur SQL de Supabase après la migration des paramètres de base
-- Paramètres SMTP (seulement s'ils n'existent pas déjà)
INSERT INTO settings (key, value, category, description) VALUES
('smtp_host', '', 'email', 'Serveur SMTP')
ON CONFLICT (key) DO NOTHING;
INSERT INTO settings (key, value, category, description) VALUES
('smtp_port', '587', 'email', 'Port SMTP')
ON CONFLICT (key) DO NOTHING;
INSERT INTO settings (key, value, category, description) VALUES
('smtp_username', '', 'email', 'Nom d''utilisateur SMTP')
ON CONFLICT (key) DO NOTHING;
INSERT INTO settings (key, value, category, description) VALUES
('smtp_password', '', 'email', 'Mot de passe SMTP (chiffré)')
ON CONFLICT (key) DO NOTHING;
INSERT INTO settings (key, value, category, description) VALUES
('smtp_secure', 'true', 'email', 'Connexion sécurisée SSL/TLS')
ON CONFLICT (key) DO NOTHING;
INSERT INTO settings (key, value, category, description) VALUES
('smtp_from_email', '', 'email', 'Adresse email d''expédition')
ON CONFLICT (key) DO NOTHING;
INSERT INTO settings (key, value, category, description) VALUES
('smtp_from_name', 'Mes Budgets Participatifs', 'email', 'Nom d''expédition')
ON CONFLICT (key) DO NOTHING;

View File

@@ -1,14 +0,0 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
// Désactiver le pré-rendu statique pour les pages qui utilisent Supabase
experimental: {
// Optimisations pour le développement
},
// Configuration pour éviter les erreurs de build avec les variables d'environnement
env: {
NEXT_PUBLIC_SUPABASE_URL: process.env.NEXT_PUBLIC_SUPABASE_URL,
NEXT_PUBLIC_SUPABASE_ANON_KEY: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
},
}
module.exports = nextConfig