uodate doc and cleaning
This commit is contained in:
100
DEBUG.md
100
DEBUG.md
@@ -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
|
||||
51
README.md
51
README.md
@@ -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.*
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user