Application full-stack : un front React + TypeScript avec un formulaire d'inscription (validation + notifications toast) qui sauvegarde les inscrits en base de données MySQL via une API Python (FastAPI). Un compte administrateur peut se connecter pour consulter les informations privées des inscrits et les supprimer. Le tout avec une architecture Docker et une pipeline CI/CD complÚte (tests unitaires, intégration, infrastructure, end-to-end, déploiements).
Visiteur
Administrateur (connexion par email / mot de passe)
L'administrateur est créé automatiquement au premier démarrage de la base, à partir de variables d'environnement (
ADMIN_EMAIL/ADMIN_PASSWORD).
ââââââââââââââââ âââââââââââââââââââââ ââââââââââââââââ
â React (Vite)â ââââș â FastAPI (Python) â ââââș â MySQL â
â front â HTTP â API REST + JWT â SQL â base â
ââââââââââââââââ âââââââââââââââââââââ ââââââââââââââââ
| Environnement | Front | Back | Base de données |
|---|---|---|---|
| Local | Vite (Docker) | FastAPI (Docker) | MySQL (Docker) + Adminer + Dozzle |
| Production | GitHub Pages | Vercel (serverless) | Aiven (MySQL managé, SSL) |
| Méthode | Route | AccÚs | Description |
|---|---|---|---|
GET |
/ |
public | Santé du service |
GET |
/users |
public | Liste des inscrits (infos réduites : nom, prénom, ville) |
POST |
/users |
public | Inscription |
POST |
/login |
public | Connexion admin â renvoie un token JWT |
GET |
/users/details |
admin | Liste avec infos privées |
DELETE |
/users/{id} |
admin | Suppression d'un inscrit |
| Champ | RĂšgle |
|---|---|
| Prénom / Nom / Ville | Minimum 2 caractÚres, lettres uniquement (accents, tréma, tiret acceptés), pas de chiffres ni caractÚres spéciaux |
Format valide : nom@domaine.extension |
|
| Date de naissance | L'utilisateur doit avoir au moins 18 ans |
| Code postal | Format français : exactement 5 chiffres |
# Créer le fichier .env à partir de l'exemple
cp .env.example .env
# Construire l'image MySQL de migration puis lancer toute la stack
docker build -t migration_mysql .
docker compose up -d --build
| Service | URL |
|---|---|
| Front React | http://localhost:3000/ci-cd-project/ |
| API FastAPI | http://localhost:8000 |
| Adminer (DB) | http://localhost:8080 |
| Dozzle (logs) | http://localhost:8081 |
npm install
npm run dev # http://localhost:5173/ci-cd-project/
En local, le front cible
http://localhost:8000. En production, l'URL du backend est injectée au build via la variableVITE_API_URL.
Couverture > 95 % (statements, branches, functions, lines â hors composants UI ShadCN).
src/tests/unitaire/) : checkAge, checkName, checkCP, checkMailsrc/tests/unitaire/api.test.ts) : client API axios (countUsers, addUser)src/tests/integration/, Vitest + Testing Library)app.test.tsx â compteur, inscription, erreurs serveur, parcours admin (login â suppression â logout)homePage.test.tsx â validation des champs et soumissionloginForm.test.tsx â connexion admin (succĂšs / Ă©chec), dĂ©connexionusersList.test.tsx â liste rĂ©duite vs privĂ©e, suppressioncypress/, Cypress)ExĂ©cutĂ©s contre la vraie stack Docker : inscription rĂ©elle en base, connexion admin, affichage des infos privĂ©es, suppression. Inclut des scĂ©narios mode offline (rĂ©seau coupĂ© via cy.intercept) qui vĂ©rifient les messages d'erreur (chargement, inscription, connexion).
npm test # Vitest (unitaires Vitest + intégration) + couverture
npm run test:unit # Jest (test unitaire de l'API)
npm run cypress # Cypress (E2E, interface) â stack Docker requise
.
âââ server/
â âââ server.py # API FastAPI (auth JWT, CRUD utilisateurs, seed admin)
âââ migration/ # Scripts SQL (crĂ©ation DB + table, init Docker)
âââ src/
â âââ components/
â â âââ LoginForm.tsx # Connexion administrateur
â â âââ UsersList.tsx # Liste des inscrits (vue admin)
â â âââ ui/ # Composants ShadCN UI
â âââ pages/HomePage/ # Formulaire d'inscription
â âââ utils/ # Validations (age, form, mail)
â âââ lib/api.ts # Client HTTP (axios) vers le backend
â âââ tests/ # unitaire/ + integration/
âââ cypress/ # Tests end-to-end
âââ docker-compose.yml # Stack mysql / adminer / python / react / dozzle
âââ vercel.json # DĂ©ploiement du backend Python sur Vercel
âââ .github/workflows/ # Pipelines CI/CD
Les dĂ©ploiements sont conditionnĂ©s Ă la rĂ©ussite des tests (pas de tests verts â pas de dĂ©ploiement).
build_test_deploy_react.yml â Frontnpm ci)npm run test:unit)npm test, avec couverture â Codecov)VITE_API_URL) + documentation TypeDocdocker.yml â Back & infrastructuremain)| Technologie | Usage |
|---|---|
| React 19 + TypeScript | Front |
| Vite | Bundler / dev server |
| FastAPI (Python) | API REST |
| MySQL | Base de données |
| JWT (PyJWT) + bcrypt | Authentification |
| Docker / Docker Compose | Conteneurisation |
| Vercel | Hébergement du backend |
| Aiven | MySQL managé (prod) |
| Vitest + Jest | Tests unitaires / intégration |
| Cypress | Tests end-to-end |
| ShadCN UI + TailwindCSS + Sonner | UI |
| TypeDoc + Codecov | Documentation / couverture |