- Created `/frontend/app/api/votes/check/route.ts` to handle GET requests for checking if a user has voted in a specific election. - Added error handling for unauthorized access and missing election ID. - Forwarded requests to the backend API and returned appropriate responses. - Updated `/frontend/app/api/votes/history/route.ts` to fetch user's voting history with error handling. - Ensured both endpoints utilize the authorization token for secure access.
7.7 KiB
7.7 KiB
📚 Documentation Complète E-Voting Frontend
📖 Guides Disponibles
1. Frontend README (frontend/README_FRONTEND.md)
- Structure du projet
- Palette de couleurs
- Pages disponibles
- Routage
- Fonctionnalités principales
- Dépendances
2. Guide de Démarrage (FRONTEND_GUIDE.md)
- Installation rapide
- Configuration
- Navigation
- Intégration Backend
- Tests et debugging
- Déploiement
- Dépannage
3. Documentation des Composants (COMPONENTS_DOC.md)
- Documentation de chaque composant
- Props et utilisation
- Patterns de composants
- Styling
- Accessibilité
- Performance
🚀 Démarrage Rapide
# 1. Aller dans le dossier frontend
cd frontend
# 2. Installer les dépendances
npm install
# 3. Démarrer l'application
npm start
L'application s'ouvre sur http://localhost:3000
📁 Structure Complète
e-voting-system/
├── frontend/
│ ├── src/
│ │ ├── components/ # 6 composants réutilisables
│ │ │ ├── Header.jsx # Barre de navigation
│ │ │ ├── Footer.jsx # Pied de page
│ │ │ ├── VoteCard.jsx # Carte de vote
│ │ │ ├── Alert.jsx # Notifications
│ │ │ ├── Modal.jsx # Modales
│ │ │ ├── LoadingSpinner.jsx # Indicateur de chargement
│ │ │ └── index.js # Export des composants
│ │ │
│ │ ├── pages/ # 7 pages principales
│ │ │ ├── HomePage.jsx # Accueil publique
│ │ │ ├── LoginPage.jsx # Connexion
│ │ │ ├── RegisterPage.jsx # Inscription
│ │ │ ├── DashboardPage.jsx # Tableau de bord
│ │ │ ├── VotingPage.jsx # Page de vote
│ │ │ ├── ArchivesPage.jsx # Archives publiques
│ │ │ ├── ProfilePage.jsx # Profil utilisateur
│ │ │ └── index.js # Export des pages
│ │ │
│ │ ├── styles/ # Styles globaux
│ │ │ ├── globals.css # Variables et styles globaux
│ │ │ └── components.css # Styles des composants de base
│ │ │
│ │ ├── config/ # Configuration
│ │ │ └── theme.js # Thème et variables design
│ │ │
│ │ ├── utils/ # Utilitaires
│ │ │ └── api.js # Client API
│ │ │
│ │ ├── hooks/ # Hooks personnalisés
│ │ │ └── useApi.js # Hooks pour API et formulaires
│ │ │
│ │ ├── App.js # Application principale
│ │ ├── App.css # Styles de l'app
│ │ ├── index.js # Point d'entrée
│ │ └── index.css # Styles de base
│ │
│ ├── public/
│ │ ├── index.html
│ │ └── manifest.json
│ │
│ ├── package.json
│ ├── .env.example
│ ├── start.sh # Script de démarrage
│ └── README_FRONTEND.md # Documentation du frontend
│
├── FRONTEND_GUIDE.md # Guide complet de démarrage
├── COMPONENTS_DOC.md # Documentation des composants
└── ...
🎯 Pages et Routes
Routes Publiques (accessible sans connexion)
| Route | Composant | Description |
|---|---|---|
/ |
HomePage | Accueil avec CTA |
/register |
RegisterPage | Créer un compte |
/login |
LoginPage | Se connecter |
/archives |
ArchivesPage | Votes terminés |
Routes Privées (accessible après connexion)
| Route | Composant | Description |
|---|---|---|
/dashboard |
DashboardPage | Tableau de bord principal |
/dashboard/actifs |
DashboardPage | Votes en cours |
/dashboard/futurs |
DashboardPage | Votes à venir |
/dashboard/historique |
DashboardPage | Mon historique |
/vote/:id |
VotingPage | Page de vote détaillée |
/profile |
ProfilePage | Gestion du profil |
🎨 Design System
Couleurs Principales
Bleu Foncé: #1e3a5f (Confiance, titres)
Bleu Primaire: #2563eb (Actions, liens)
Bleu Clair: #3b82f6 (Dégradés)
Vert: #10b981 (Succès)
Orange: #f97316 (Alertes)
Rouge: #ef4444 (Erreurs)
Gris Clair: #f3f4f6 (Fond)
Blanc: #ffffff (Cartes)
Espacements
XS: 0.25rem MD: 1rem 2XL: 3rem
SM: 0.5rem LG: 1.5rem
Typographie
Font: Inter, Segoe UI, Roboto (sans-serif)
🔄 Flux d'Authentification
[Utilisateur non connecté]
↓
Page d'Accueil
↓
Inscription/Connexion
↓
Token + Voter en localStorage
↓
Redirection Dashboard
↓
Accès aux pages privées
📊 Composants Utilisés
Composants React
- Header: Navigation responsive
- Footer: Pied de page
- VoteCard: Affichage des votes
- Alert: Notifications
- Modal: Confirmations
- LoadingSpinner: Indicateurs
Icônes
- Lucide React (38+ icônes incluses)
Librairies
- React Router v6 (routage)
- Axios (requêtes HTTP)
🚀 Fonctionnalités Principales
✅ Authentification
- Inscription sécurisée
- Connexion avec JWT
- Gestion de session
✅ Gestion des Votes
- Affichage des votes par statut
- Vote avec confirmation
- Visualisation des résultats
✅ Responsive Design
- Desktop, Tablet, Mobile
- Navigation adaptée
- Performance optimale
✅ Accessibilité
- Navigation au clavier
- Contraste élevé
- Sémantique HTML
🔧 Développement
Commandes Disponibles
# Démarrer le serveur de développement
npm start
# Créer un build de production
npm run build
# Lancer les tests
npm test
# Éjecter la configuration (⚠️ irréversible)
npm eject
Variables d'Environnement
REACT_APP_API_URL # URL du backend (défaut: http://localhost:8000)
REACT_APP_ENV # Environnement (development, production)
REACT_APP_DEBUG_MODE # Activer le mode debug
📱 Responsive Breakpoints
Mobile: < 480px
Tablet: 480px - 768px
Laptop: 768px - 1024px
Desktop: 1024px+
🔒 Sécurité
✅ Authentification JWT ✅ Tokens dans localStorage ✅ Validation côté client ✅ Protection des routes ✅ En-têtes de sécurité ✅ HTTPS en production
📈 Performance
- Code splitting avec React.lazy()
- Lazy loading des images
- Optimisation des requêtes API
- Caching navigateur
- Bundle optimisé
🌐 Déploiement
Options
- Vercel - Déploiement simple et rapide
- GitHub Pages - Gratuit, hébergement GitHub
- AWS S3 + CloudFront - Scalable, production
- Docker - Conteneurisation
Voir FRONTEND_GUIDE.md pour les détails.
📚 Ressources
📞 Support et Contact
Pour toute question:
- Consultez la documentation
- Vérifiez les logs console
- Ouvrez une issue GitHub
✅ Checklist
- Installation complète
- Backend en cours d'exécution
npm startlance l'app- Accueil chargée correctement
- Inscription fonctionne
- Connexion fonctionne
- Dashboard visible après connexion
- Profil accessible
- Archives publiques visible
- Tests unitaires passent
Bienvenue dans E-Voting! 🗳️
Pour commencer: npm start