CIA/e-voting-system/.claude/BUILD_SOLUTION.md
E-Voting Developer 8baabf528c feat: Implement Historique and Upcoming Votes pages with styling and data fetching
- Added HistoriquePage component to display user's voting history with detailed statistics and vote cards.
- Created UpcomingVotesPage component to show upcoming elections with a similar layout.
- Developed CSS styles for both pages to enhance visual appeal and responsiveness.
- Integrated API calls to fetch user's votes and upcoming elections.
- Added a rebuild script for Docker environment setup and data restoration.
- Created a Python script to populate the database with sample data for testing.
2025-11-06 05:12:03 +01:00

144 lines
4.4 KiB
Markdown

# 🔧 Notes de Développement
## ✅ Solution: Build Frontend AVANT Docker
**Inspiré par:** L_Onomathoppee project
### Le Problème (Résolu ✅)
- **Ancien problème:** Docker build avec cache → changements React non visibles
- **Cause:** CRA buildait le React à chaque `docker-compose up --build`, mais le cache Docker gardait l'ancien résultat
- **Solution:** Build React **AVANT** Docker avec `npm run build`
### 🚀 Workflow Recommandé
```bash
# 1. Éditer le code
vim frontend/src/pages/DashboardPage.jsx
# 2. Build et deploy (TOUT EN UN)
make build
# ✨ Les changements sont visibles immédiatement!
```
### 📊 Comment ça fonctionne
1.`npm run build` dans `frontend/` → crée `frontend/build/`
2. ✅ Copie le build dans `build/frontend/`
3. ✅ Crée un Dockerfile qui utilise **Nginx** pour servir le build statique
4. ✅ Docker-compose lance les conteneurs avec le build frais
5.**BONUS:** Nginx optimise le cache des assets et gère React Router
### 📁 Structure après `make build`
```
build/
├── docker-compose.yml # Orchestration
├── init.sql # Init MariaDB
├── frontend/
│ ├── Dockerfile # Nginx + static files
│ ├── nginx.conf # Config React SPA (try_files)
│ └── [fichiers React compilés]
└── backend/
├── Dockerfile # Python FastAPI
├── pyproject.toml
└── [fichiers Python]
```
### 🔑 Commandes principales
```bash
# Build complet (recommandé après changements au code)
make build # Clean + npm build + docker build + deploy
# Redémarrage sans rebuild (si rien n'a changé au code)
make up # Juste redémarrer les conteneurs existants
# Arrêter les services
make down
# Voir les logs en temps réel
make logs-frontend # Logs du frontend (Nginx)
make logs-backend # Logs du backend (FastAPI)
# Nettoyer complètement
make clean # Supprime build/, frontend/build/, images Docker
```
### 📝 Exemple: Corriger la Navigation Dashboard
```bash
# 1. Éditer le fichier
vim frontend/src/pages/DashboardPage.jsx
# → Ajoute useLocation pour détecter les changements de route
# 2. Sauvegarder et builder
make build
# → npm run build → docker build → docker-compose up -d
# 3. Vérifier dans le navigateur
# http://localhost:3000/dashboard/actifs
# ✅ Le filtre change maintenant correctement!
```
### ⚙️ Scripts et Fichiers
| Fichier | Rôle |
|---------|------|
| `build.sh` | Script de build complet (npm build + docker) |
| `Makefile` | Commandes pratiques (make build, make up, etc) |
| `build/docker-compose.yml` | Généré automatiquement, orchestration |
| `.claude/` | Documentation (ce fichier) |
### 🌐 URLs d'accès après `make build`
- **Frontend:** http://localhost:3000
- **Backend:** http://localhost:8000
- **Database:** localhost:3306
### ✨ Avantages de cette approche
**Pas de cache Docker** → changements visibles **immédiatement**
**Build production réel**`npm run build` (pas de dev server)
**Nginx optimisé** → Cache des assets, gestion React Router
**Simple et rapide** → Une commande: `make build`
**Production-ready** → Comme en production réelle
### ⚠️ Points importants
1. **Après modifier le frontend** → Toujours faire `make build`
2. **Après modifier le backend**`make build` (ou `make up` si pas de changement à la structure)
3. **Pour nettoyer**`make clean` (supprime tout, build à zéro)
4. **Les fichiers `build/`** → À .gitignore (fichiers générés)
### 🔍 Troubleshooting
**Les changements React ne sont pas visibles?**
```bash
make clean # Nettoie tout
make build # Rebuild from scratch
```
**Port déjà utilisé?**
```bash
make down # Arrête les conteneurs
make up # Redémarre
```
**Voir ce qui se passe?**
```bash
cd build
docker-compose logs -f frontend # Voir tous les logs Nginx
docker-compose logs -f backend # Voir tous les logs FastAPI
```
### 📚 Référence: Inspiré par L_Onomathoppee
Ce workflow est basé sur le projet L_Onomathoppee qui:
- Build le frontend React AVANT Docker
- Utilise Nginx pour servir les fichiers statiques
- Gère correctement React Router avec `try_files`
- Cache optimisé pour les assets
Voir: ~/L_Onomathoppee/build.sh pour la version complète