Files
dockezr/README.md
T
sartron_Northblue 9add6d9ec4 Reservation de salle
2025-10-13 14:03:21 +04:00

10 KiB

🏢 Expernet - Système de Réservation de Salles

Système complet de réservation de salles pour le centre de formation Expernet, développé avec FastAPI (Backend), Next.js (Frontend) et PostgreSQL (Base de données), orchestré avec Docker Compose.

📋 Stack Technique

  • Backend: FastAPI (Python) avec AsyncPG
  • Frontend: Next.js 14 + TypeScript + Tailwind CSS
  • Base de données: PostgreSQL 16
  • Containerisation: Docker & Docker Compose

Fonctionnalités

🏛️ Gestion des Salles

  • 5 salles pré-configurées (Atlas, Horizon, Innovation, Connect, Digital)
  • Affichage des capacités et équipements
  • Interface intuitive de sélection

📅 Réservations

  • Formulaire de réservation complet
  • Champ email optionnel
  • Sélection de date et horaires
  • Vérification en temps réel de la disponibilité
  • Détection automatique des conflits d'horaires
  • Bouton désactivé si créneau occupé
  • Validation des créneaux disponibles
  • Annulation de réservations

📊 Planning Visuel

  • Grille de planning par jour (8h-22h)
  • Vue d'ensemble de toutes les salles
  • Code couleur : Disponible / Réservé
  • Nom de l'utilisateur affiché sur les créneaux réservés
  • Navigation par date
  • Liste détaillée des réservations du jour

📋 Suivi

  • Vue d'ensemble de toutes les réservations
  • Filtrage par salle et par date
  • Historique complet

🚀 Démarrage Rapide

Prérequis

  • Docker et Docker Compose installés sur votre machine
  • Ports 3000, 8000 et 5432 disponibles

Installation et lancement

  1. Cloner le projet (si applicable)
git clone <votre-repo>
cd dockezr
  1. Lancer tous les services avec Docker Compose
docker-compose up -d

ou utilisez le script Windows :

start.bat

Cette commande va :

  • Créer le réseau Docker dockezr_network
  • Démarrer PostgreSQL sur le port 5432
  • Créer automatiquement les tables et les 5 salles par défaut
  • Démarrer le backend FastAPI sur le port 8000
  • Démarrer le frontend Next.js sur le port 3000
  1. Accéder à l'application

📁 Structure du Projet

dockezr/
├── backend/                  # API FastAPI
│   ├── main.py              # Point d'entrée de l'API
│   ├── requirements.txt     # Dépendances Python
│   └── Dockerfile           # Configuration Docker
│
├── frontend/                # Application Next.js
│   ├── app/                 # Pages et composants Next.js 14
│   │   ├── layout.tsx
│   │   ├── page.tsx
│   │   └── globals.css
│   ├── package.json         # Dépendances Node.js
│   ├── tsconfig.json        # Configuration TypeScript
│   ├── tailwind.config.ts   # Configuration Tailwind
│   └── Dockerfile           # Configuration Docker
│
├── docker-compose.yml       # Orchestration des services
├── .dockerignore           # Fichiers ignorés par Docker
├── .gitignore              # Fichiers ignorés par Git
└── README.md               # Ce fichier

🔧 Commandes Utiles

Démarrer les services

docker-compose up -d

Arrêter les services

docker-compose down

Voir les logs

# Tous les services
docker-compose logs -f

# Service spécifique
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f db

Reconstruire les images

docker-compose up -d --build

Arrêter et supprimer les volumes (⚠️ supprime les données)

docker-compose down -v

Accéder à un conteneur

# Backend
docker exec -it dockezr_backend sh

# Frontend
docker exec -it dockezr_frontend sh

# Base de données
docker exec -it dockezr_db psql -U user -d dockezr

🏛️ Salles Pré-configurées

Le système est livré avec 5 salles de formation :

Salle Capacité Équipements
Salle Atlas 30 personnes Vidéoprojecteur, Tableau blanc, WiFi
Salle Horizon 15 personnes Écran TV, Tableau blanc, WiFi
Salle Innovation 50 personnes Vidéoprojecteur, Sono, WiFi, Climatisation
Salle Connect 8 personnes Écran TV, Visioconférence, WiFi
Salle Digital 20 personnes 20 postes informatiques, Vidéoprojecteur, WiFi

🌐 API Endpoints

Routes des Salles

  • GET /rooms - Liste toutes les salles
  • GET /rooms/{room_id} - Récupère une salle spécifique
  • POST /rooms - Crée une nouvelle salle
  • DELETE /rooms/{room_id} - Supprime une salle

Routes des Réservations

  • GET /reservations - Liste toutes les réservations
  • GET /reservations/room/{room_id} - Réservations d'une salle spécifique
  • GET /reservations/date/{date} - Réservations pour une date donnée
  • POST /reservations - Crée une nouvelle réservation
  • DELETE /reservations/{reservation_id} - Annule une réservation

Validation automatique

L'API vérifie automatiquement :

  • La disponibilité de la salle
  • Les conflits d'horaires
  • La cohérence des horaires (début < fin)
  • L'existence de la salle

Documentation interactive

🗄️ Base de Données

Configuration

  • Host: localhost (ou db depuis les conteneurs)
  • Port: 5432
  • Utilisateur: user
  • Mot de passe: password
  • Base de données: dockezr

Structure des tables

Table rooms

  • id (SERIAL PRIMARY KEY)
  • name (VARCHAR UNIQUE)
  • capacity (INTEGER)
  • equipment (TEXT)
  • description (TEXT)

Table reservations

  • id (SERIAL PRIMARY KEY)
  • room_id (INTEGER FOREIGN KEY)
  • user_name (VARCHAR)
  • user_email (VARCHAR)
  • reservation_date (DATE)
  • start_time (TIME)
  • end_time (TIME)
  • purpose (TEXT)
  • created_at (TIMESTAMP)

Connexion à PostgreSQL

docker exec -it dockezr_db psql -U user -d dockezr

🎨 Frontend

L'interface utilise :

  • Next.js 14 avec App Router
  • TypeScript pour le typage statique
  • Tailwind CSS pour le styling moderne et responsive
  • Axios pour les requêtes HTTP vers l'API

Fonctionnalités de l'interface

Onglet Planning (par défaut)

  • 📊 Grille de planning visuelle (8h-22h)
  • 🎨 Code couleur : vert (disponible) / rouge (réservé)
  • 📅 Sélecteur de date
  • 👤 Affichage du nom de l'utilisateur sur les créneaux
  • 📋 Liste détaillée des réservations du jour sélectionné
  • 🖱️ Info-bulle au survol des créneaux réservés

Onglet Réservation

  • Liste visuelle des salles disponibles avec détails
  • Sélection interactive de salle
  • Formulaire de réservation complet
  • Email optionnel (pas obligatoire)
  • Vérification en temps réel de la disponibilité
  • / Indicateur visuel de disponibilité du créneau
  • 🔒 Bouton désactivé automatiquement si créneau occupé

Onglet Mes Réservations

  • Affichage de toutes les réservations
  • Informations détaillées (salle, date, horaire, objet)
  • Possibilité d'annuler une réservation

🔄 Développement

Mode développement avec hot-reload

Les deux services (backend et frontend) sont configurés en mode développement avec rechargement automatique :

  • Backend: Uvicorn avec --reload
  • Frontend: Next.js avec npm run dev

Les modifications de code sont automatiquement détectées et appliquées.

Variables d'environnement

Backend

  • DATABASE_URL: URL de connexion PostgreSQL

Frontend

  • NEXT_PUBLIC_API_URL: URL de l'API backend

🐛 Dépannage

Les conteneurs ne démarrent pas

# Vérifier les logs
docker-compose logs

# Reconstruire les images
docker-compose up -d --build

La base de données n'est pas prête

Le backend attend que PostgreSQL soit complètement démarré grâce au healthcheck.

Erreurs de connexion à l'API

Vérifiez que :

  • Le backend est démarré : docker-compose ps
  • L'URL de l'API est correcte dans le frontend
  • Le réseau Docker fonctionne : docker network ls

📝 Personnalisation

Ajouter de nouvelles salles

Via l'API :

curl -X POST http://localhost:8000/rooms \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Salle Formation",
    "capacity": 25,
    "equipment": "Vidéoprojecteur, WiFi",
    "description": "Salle de formation polyvalente"
  }'

Ou directement dans la base de données :

INSERT INTO rooms (name, capacity, equipment, description) 
VALUES ('Ma Salle', 40, 'Équipements', 'Description');

Modifier les ports

Éditez le fichier docker-compose.yml et changez les mappings de ports :

ports:
  - "VOTRE_PORT:PORT_INTERNE"

Ajouter des dépendances

Backend (Python):

  1. Ajoutez la dépendance dans backend/requirements.txt
  2. Reconstruisez : docker-compose up -d --build backend

Frontend (Node.js):

  1. Ajoutez la dépendance dans frontend/package.json
  2. Reconstruisez : docker-compose up -d --build frontend

🎯 Cas d'Usage

Ce système est idéal pour :

  • Centres de formation
  • Espaces de coworking
  • Entreprises avec salles de réunion
  • Universités et écoles
  • Bibliothèques avec salles d'étude

📦 Production

Pour un déploiement en production, modifiez :

  1. Les mots de passe et secrets dans docker-compose.yml
  2. Désactivez le mode debug/reload
  3. Utilisez des variables d'environnement sécurisées
  4. Configurez HTTPS/SSL
  5. Ajoutez un reverse proxy (Nginx, Traefik)
  6. Mettez en place des sauvegardes de la base de données

🔐 Sécurité

⚠️ Important pour la production :

  • Changez les identifiants PostgreSQL par défaut
  • Utilisez des secrets Docker pour les mots de passe
  • Activez l'authentification utilisateur
  • Configurez CORS correctement
  • Utilisez HTTPS

📄 Licence

Ce projet est développé pour Expernet - Centre de Formation.


🏢 Système de réservation Expernet - Simplifions la gestion des salles ! 🚀