Application complète de gestion des absences avec authentification JWT, gestion des rôles (Admin RH, Manager, Employé) et interface moderne.
- Node.js + Express
- MySQL (base de données)
- JWT (authentification)
- bcryptjs (hashage des mots de passe)
- Architecture MVC (Models, Views, Controllers)
- React + TypeScript
- Material-UI (interface utilisateur)
- React Router (navigation)
- Axios (requêtes HTTP)
- Vite (bundler)
- Docker + Docker Compose
- Nginx (serveur web pour le frontend)
gestion-absences/
├── backend/
│ ├── src/
│ │ ├── config/ # Configuration DB et initialisation
│ │ ├── controllers/ # Contrôleurs (logique des routes)
│ │ ├── middlewares/ # Middlewares (auth, validation)
│ │ ├── models/ # Modèles de données
│ │ ├── routes/ # Définition des routes API
│ │ ├── services/ # Logique métier
│ │ └── server.js # Point d'entrée du serveur
│ ├── init.sql # Script d'initialisation MySQL
│ ├── package.json
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── components/ # Composants React réutilisables
│ │ ├── context/ # Context API (AuthContext)
│ │ ├── pages/ # Pages de l'application
│ │ ├── services/ # Services API
│ │ ├── types/ # Types TypeScript
│ │ ├── App.tsx # Application principale
│ │ └── main.tsx # Point d'entrée React
│ ├── package.json
│ ├── Dockerfile
│ └── nginx.conf
└── docker-compose.yml
- Cloner le projet
cd /home/john/project- Créer le fichier .env (optionnel)
cp .env.docker .env
# Modifier les valeurs si nécessaire- Lancer tous les services
docker-compose up -d- Vérifier que tout fonctionne
docker-compose ps
docker-compose logs -f- Accéder à l'application
- Frontend : http://localhost
- Backend API : http://localhost:5000
- MySQL : localhost:3306
- Arrêter les services
docker-compose down- Arrêter et supprimer les volumes (
⚠️ Supprime les données)
docker-compose down -v- Installer les dépendances
cd backend
npm install- Configurer les variables d'environnement
cp .env.example .env
# Modifier les valeurs dans .env- Démarrer MySQL (doit être installé localement)
# Assurez-vous que MySQL est en cours d'exécution
sudo service mysql start- Initialiser la base de données
npm run init-db- Démarrer le serveur
# Mode développement
npm run dev
# Mode production
npm startLe backend sera accessible sur http://localhost:5000
- Installer les dépendances
cd frontend
npm install- Configurer l'API
# Le fichier .env contient déjà l'URL de l'API
cat .env
# VITE_API_URL=http://localhost:5000/api- Démarrer l'application
npm run devLe frontend sera accessible sur http://localhost:3000
- Build de production
npm run build
npm run preview| Utilisateur | Mot de passe | Rôle |
|---|---|---|
| admin | admin123 | Admin RH |
| manager_it | manager123 | Manager IT |
| manager_mkt | manager123 | Manager Marketing |
| employee1 | employee123 | Employé |
| employee2 | employee123 | Employé |
| employee3 | employee123 | Employé |
POST /api/auth/login- ConnexionGET /api/auth/profile- Profil utilisateurPOST /api/auth/change-password- Changer le mot de passe
GET /api/employees- Liste des employésGET /api/employees/:id- Détails d'un employéPOST /api/employees- Créer un employé (Admin)PUT /api/employees/:id- Modifier un employé (Admin)DELETE /api/employees/:id- Supprimer un employé (Admin)GET /api/employees/search?q=term- Rechercher des employés
GET /api/absences- Liste des absencesGET /api/absences/:id- Détails d'une absencePOST /api/absences- Créer une absence (Admin/Manager)PUT /api/absences/:id- Modifier une absence (Admin/Manager)DELETE /api/absences/:id- Supprimer une absence (Admin)GET /api/absences/stats/:employeeId- Statistiques d'un employé
GET /api/requests- Liste des demandesGET /api/requests/:id- Détails d'une demandePOST /api/requests- Créer une demandeGET /api/requests/pending/me- Demandes en attente (Manager)PUT /api/requests/:id/approve- Approuver une demande (Manager)PUT /api/requests/:id/reject- Refuser une demande (Manager)DELETE /api/requests/:id- Supprimer une demande
GET /api/attendance- Liste des présencesGET /api/attendance/:employeeId/:date- Présence spécifiquePOST /api/attendance- Enregistrer une présence (Admin/Manager)PUT /api/attendance/:id- Modifier une présence (Admin/Manager)DELETE /api/attendance/:id- Supprimer une présence (Admin)
GET /api/reports/absences- Rapport des absences (Admin/Manager)GET /api/reports/attendance- Rapport des présences (Admin/Manager)GET /api/reports/employee/:id- Rapport par employé (Admin/Manager)GET /api/reports/service/:service- Rapport par service (Admin/Manager)GET /api/reports/monthly?year=2024&month=11- Rapport mensuel (Admin/Manager)
- ✅ Mots de passe hashés avec bcryptjs
- ✅ Authentification par JWT
- ✅ Protection des routes par rôles
- ✅ Validation des données
- ✅ Protection CORS
- ✅ Headers de sécurité
- ✅ CRUD complet sur tous les modules
- ✅ Gestion des employés
- ✅ Validation des demandes
- ✅ Génération de rapports
- ✅ Statistiques globales
- ✅ Validation des demandes de son équipe
- ✅ Vue sur les absences de son équipe
- ✅ Rapports de son service
- ✅ Gestion des présences
- ✅ Création de demandes d'absence
- ✅ Consultation de ses absences
- ✅ Historique de ses demandes
- ✅ Profil personnel
# Voir les logs
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f database
# Redémarrer un service
docker-compose restart backend
# Rebuild complet
docker-compose up -d --build
# Entrer dans un conteneur
docker exec -it gestion-absences-backend sh
docker exec -it gestion-absences-db mysql -u root -p# Backup de la base
docker exec gestion-absences-db mysqldump -u root -p gestion_absences > backup.sql
# Restore de la base
docker exec -i gestion-absences-db mysql -u root -p gestion_absences < backup.sql- Le frontend utilise Material-UI pour une interface moderne
- L'API est documentée avec des messages d'erreur clairs
- Les dates sont au format ISO (YYYY-MM-DD)
- Les tokens JWT expirent après 7 jours par défaut
- Vérifiez que MySQL est bien démarré
- Vérifiez les variables d'environnement
- Vérifiez les logs :
docker-compose logs backend
- Vérifiez que le backend est accessible sur le port 5000
- Vérifiez la variable
VITE_API_URLdans.env - Vérifiez les CORS dans le backend
- Attendez que MySQL soit complètement initialisé
- Vérifiez les credentials dans
.env - Réinitialisez les volumes :
docker-compose down -v
MIT
Pour contribuer au projet :
- Fork le projet
- Créez une branche (
git checkout -b feature/amazing-feature) - Commit vos changements (
git commit -m 'Add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrez une Pull Request
✨ Projet créé avec passion pour simplifier la gestion des absences ! ✨