Home

React Form Project - Full Stack Application

Build and Test React App codecov npm version

đŸ‘„ Équipe de DĂ©veloppement

Groupe de 2 étudiants :

📋 RĂ©partition des TĂąches

TĂąche Responsable Statut
Architecture Docker (MongoDB/Node.js) Varlopecar ✅ TerminĂ©
Architecture Docker (MySQL/Python/React/Adminer) Varlopecar ✅ TerminĂ©
Frontend React avec formulaire et base de donnĂ©es Varlopecar ✅ TerminĂ©
API Node.js avec MongoDB pour les posts Varlopecar ✅ TerminĂ©
Gestion des utilisateurs avec rĂŽles admin Varlopecar ✅ TerminĂ©
Menu latĂ©ral et navigation Varlopecar ✅ TerminĂ©
Tests unitaires, intĂ©gration et E2E Varlopecar ✅ TerminĂ©
Configuration Terraform (Docker) Varlopecar ✅ TerminĂ©
Configuration Terraform (Scalingo) Varlopecar ✅ TerminĂ©
Pipelines GitHub Actions Varlopecar ✅ TerminĂ©
Documentation complĂšte Varlopecar ✅ TerminĂ©

đŸ—ïž Architecture

Ce projet implémente une architecture dual API :

  1. Python FastAPI + MySQL : Gestion des utilisateurs et authentification
  2. Node.js + MongoDB : Posts de blog et gestion de contenu
  3. React Frontend : Interface utilisateur avec Material-UI et menu latéral

✹ FonctionnalitĂ©s

Gestion des Utilisateurs (Python FastAPI + MySQL)

  • Inscription Utilisateur : Validation complĂšte avec schĂ©mas Zod
  • Authentification : Connexion/dĂ©connexion avec tokens JWT
  • Gestion des Utilisateurs :
    • Affichage de la liste des utilisateurs avec informations rĂ©duites
    • Les admins peuvent voir les informations privĂ©es des utilisateurs
    • Les admins peuvent supprimer les utilisateurs non-admin
    • ContrĂŽle d'accĂšs basĂ© sur les rĂŽles

SystĂšme de Blog (Node.js + MongoDB)

  • Posts de Blog : Affichage des posts sur la page d'accueil
  • Gestion de Contenu : CrĂ©ation, lecture, modification et suppression de posts
  • Mise Ă  jour en temps rĂ©el : Chargement dynamique du contenu

Frontend

  • Menu LatĂ©ral : Navigation complĂšte avec sidebar responsive
  • Validation de Formulaire : Validation complĂšte avec schĂ©mas Zod
  • ExpĂ©rience Utilisateur :
    • Bouton de soumission dĂ©sactivĂ© jusqu'Ă  ce que tous les champs soient remplis
    • Messages d'erreur affichĂ©s sous chaque champ invalide
    • Notifications toast pour succĂšs et Ă©chec
    • Design responsive avec Material-UI
  • Navigation : Menu latĂ©ral avec Ă©lĂ©ments basĂ©s sur les rĂŽles
  • RĂšgles de Validation :
    • VĂ©rification de l'Ăąge (18+ ans)
    • Format de code postal français
    • Validation des noms (permettant accents, tirets, espaces)
    • Validation d'email
  • Tests : Couverture de tests complĂšte avec tests unitaires et d'intĂ©gration
  • Documentation : Documentation auto-gĂ©nĂ©rĂ©e avec JSDoc
  • Pipeline CI/CD : Processus automatisĂ© de build, test et dĂ©ploiement

🚀 DĂ©mo en Ligne

Visitez la démo en ligne : https://varlopecar.github.io/react-form/

🔧 Variables d'Environnement

Créez un fichier .env dans le répertoire racine :

# API de Gestion des Utilisateurs (Python FastAPI)
VITE_API_URL=http://localhost:8000

# API de Blog (Node.js)
VITE_BLOG_API_URL=http://localhost:3001

# Environnement
NODE_ENV=development

📩 Installation

# Cloner le repository
git clone https://github.com/varlopecar/react-form.git

# Installer les dépendances
pnpm install

# Démarrer le serveur de développement
pnpm dev

# Lancer les tests
pnpm test

# Générer le rapport de couverture
pnpm coverage

# Générer la documentation
pnpm doc

# Build pour la production
pnpm build

🐳 Configuration Docker

API de Gestion des Utilisateurs (Python FastAPI + MySQL)

# Démarrer les services de gestion des utilisateurs
cd backend
docker-compose up -d

# Cela démarrera :
# - Base de données MySQL
# - Backend FastAPI
# - Adminer (gestion de base de données)

API de Blog (Node.js + MongoDB)

# Démarrer l'API de blog (repository séparé)
cd ../express-mongodb-app
docker-compose up -d

# Cela démarrera :
# - Base de données MongoDB
# - Serveur API Node.js

Architecture Docker ComplĂšte

# Démarrer toute l'architecture avec Terraform
cd ../terraform-architecture
terraform init
terraform plan -var="environment=docker"
terraform apply -var="environment=docker"

🌐 DĂ©ploiement Scalingo

# Déployer sur Scalingo avec Terraform
cd ../terraform-architecture
terraform init
terraform plan -var="environment=scalingo" -var="scalingo_token=VOTRE_TOKEN"
terraform apply -var="environment=scalingo" -var="scalingo_token=VOTRE_TOKEN"

📡 Endpoints API

API de Gestion des Utilisateurs (Python FastAPI)

  • POST /register - Inscription utilisateur
  • POST /login - Authentification utilisateur
  • GET /users - Obtenir tous les utilisateurs (admin seulement)
  • DELETE /users/{id} - Supprimer un utilisateur (admin seulement)
  • GET /me - Obtenir les informations de l'utilisateur actuel

API de Blog (Node.js)

  • GET /posts - Obtenir tous les posts de blog
  • POST /posts - CrĂ©er un nouveau post de blog
  • PUT /posts/{id} - Modifier un post de blog
  • DELETE /posts/{id} - Supprimer un post de blog

đŸ‘€ RĂŽles Utilisateurs

Utilisateurs Réguliers

  • Peuvent s'inscrire et se connecter
  • Peuvent voir la page d'accueil avec les posts de blog
  • Peuvent voir la liste des utilisateurs avec informations rĂ©duites (nom, email, statut admin seulement)

Utilisateurs Admin

  • Toutes les permissions des utilisateurs rĂ©guliers
  • Peuvent voir les informations complĂštes des utilisateurs (y compris les donnĂ©es privĂ©es)
  • Peuvent supprimer les utilisateurs non-admin
  • Peuvent gĂ©rer les posts de blog (crĂ©er, modifier, supprimer)

đŸ§Ș Tests

Tests Unitaires

# Lancer les tests unitaires
pnpm test:unit

# Lancer les tests avec interface graphique
pnpm test:ui

# Générer la couverture de code
pnpm coverage

Tests d'Intégration

# Lancer les tests d'intégration
pnpm test:integration

Tests End-to-End

# Lancer les tests E2E avec Cypress
pnpm e2e

# Ouvrir Cypress en mode interactif
pnpm cypress:open

🔄 Pipeline CI/CD

Ce projet utilise GitHub Actions pour l'intégration et le déploiement continus :

  1. Build et Test : S'exécute sur chaque push et pull request

    • Installe les dĂ©pendances
    • Lance les tests avec couverture
    • GĂ©nĂšre la documentation
    • Build le projet
  2. Déploiement GitHub Pages : Déploie le site de démo

    • Build le projet
    • DĂ©ploie sur GitHub Pages
  3. Intégration Docker :

    • Build et teste les conteneurs Docker
    • Lance les tests d'intĂ©gration
  4. Déploiement Terraform :

    • Configure l'environnement Docker
    • DĂ©ploie sur Scalingo
  5. Tests de Sécurité :

    • Scan de vulnĂ©rabilitĂ©s avec Trivy
    • Tests de performance avec Lighthouse

📁 Structure du Projet

react-form/
├── src/
│   ├── components/          # Composants React
│   │   ├── Sidebar.tsx     # Menu latĂ©ral
│   │   └── Navigation.tsx  # Navigation principale
│   ├── pages/              # Composants de pages
│   │   ├── HomePage.tsx    # Page d'accueil avec blog
│   │   ├── PostsPage.tsx   # Gestion des posts
│   │   ├── UsersPage.tsx   # Gestion des utilisateurs
│   │   └── DashboardPage.tsx
│   ├── services/           # Services API
│   ├── schemas/            # SchĂ©mas de validation
│   └── tests/              # Fichiers de test
├── backend/                # Backend Python FastAPI
│   ├── main.py            # Application FastAPI
│   ├── models.py          # ModĂšles de base de donnĂ©es
│   ├── schemas.py         # SchĂ©mas Pydantic
│   └── docker-compose.yml # Configuration Docker
├── cypress/               # Tests E2E
├── scripts/               # Scripts de build et dĂ©ploiement
└── docs/                  # Documentation

📚 Documentation

La documentation est disponible directement depuis l'application en cliquant sur le lien "Documentation", ou vous pouvez y accéder à : https://varlopecar.github.io/react-form/docs/

🔐 SĂ©curitĂ©

  • Authentification JWT sĂ©curisĂ©e
  • Validation des donnĂ©es cĂŽtĂ© client et serveur
  • ContrĂŽle d'accĂšs basĂ© sur les rĂŽles
  • Scan de vulnĂ©rabilitĂ©s automatisĂ©
  • Variables d'environnement sĂ©curisĂ©es

📊 MĂ©triques

  • Couverture de Tests : >90%
  • Temps de Build : <5 minutes
  • Temps de DĂ©ploiement : <10 minutes
  • Performance Lighthouse : >90/100

đŸ€ Contribution

  1. Fork le repository
  2. Créer une branche de fonctionnalité
  3. Faire vos modifications
  4. Ajouter des tests pour les nouvelles fonctionnalités
  5. S'assurer que tous les tests passent
  6. Soumettre une pull request

📞 Support

Pour des questions ou des problĂšmes :

📄 Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

  • Material-UI pour les composants d'interface
  • FastAPI pour le backend Python
  • Express.js pour l'API Node.js
  • Cypress pour les tests E2E
  • Terraform pour l'infrastructure as code
  • GitHub Actions pour l'automatisation CI/CD

DĂ©veloppĂ© avec ❀ par l'Ă©quipe de dĂ©veloppement