Ce projet est une application dockerisée de calcul d'IMC (Indice de Masse Corporelle) construite avec Next.js, TypeScript et MySQL. Il à été réalisé dans le carde du suivi du cours 8INF876 - Conception/architecture des systèmes infonuagique, à l'UQAC [Université du Québec A Chicoutimi]. Le projet est courament hébergé à l'adresse suivante pour un test simplifié : https://fousset-toigo-infonuagique.arno-bidet.dev
L'application est orchestrée en utilisant Docker Compose avec les services suivants :
- Conteneur:
mysql-db - Image: MySQL personnalisé avec scripts d'initialisation
- Dockerfile:
dockerfile-bd - Port: 3306 (interne)
- Initialisation: Création automatique de schéma via
init.sql
- Conteneur:
website - Image: Application Node.js personnalisée
- Dockerfile:
dockerfile-prod(production) /dockerfile-dev(développement) - Port: 3001:3000 (hôte:conteneur)
- Dépendances: Dépend du service
db
L'application utilise une base de données MySQL avec la structure suivante :
Base de données: bmi_database
Table: bmi_records
├── uuid (CHAR(36)) - Clé primaire
├── nickname (VARCHAR(50)) - Identifiant utilisateur
├── weight (INT) - Poids en kilogrammes
├── height (INT) - Taille en centimètres
├── bmi (DECIMAL(4,1)) - Valeur IMC calculée
└── date (DATETIME) - Horodatage de création d'enregistrementLe calcul de l'IMC devant être fait côté serveur, la valeur est stockée pour le pas à la recalculer à chaque demande du client.
| Endpoint | Méthode | Objectif | Entrée | Réponse | Gestion d'erreur |
|---|---|---|---|---|---|
/api/send-bmi |
POST | Calculer et stocker les données IMC | Données de formulaire (pseudonyme, poids, taille) | Redirection vers /bmi-result?uuid={uuid} |
Redirection avec errorCode si validation échoue |
/api/get-bmi |
POST | Récupérer les données IMC par UUID | JSON avec UUID | JSON avec valeur IMC | 404 si enregistrement non trouvé |
/api/get-all-bmi |
GET | Récupérer les 10 derniers enregistrements IMC | Aucune | JSON avec tableau d'enregistrements (triés par date DESC) | 400 en cas d'erreur serveur |
src/app/
├── page.tsx # Page d'accueil avec formulaire de saisie IMC
├── layout.tsx # Wrapper de mise en page d'application
├── globals.css # Styles globaux
├── favicon.ico # Icône d'application
└── bmi-result/
└── page.tsx # Page d'affichage des résultats IMC
# Configuration de Base de Données
MYSQL_ROOT_PASSWORD=votre_mot_de_passe_root
MYSQL_DATABASE=bmi_database
MYSQL_USER=votre_utilisateur_db
MYSQL_PASSWORD=votre_mot_de_passe_db
# Connexion Base de Données d'Application
DATABASE_HOST=db
DATABASE_USER=votre_utilisateur_db
DATABASE_PASSWORD=votre_mot_de_passe_db
DATABASE_NAME=bmi_database
DATABASE_PORT=3306
# URLs d'Application
NEXT_PUBLIC_API_URL=http://localhost:3001/api
NEXT_PUBLIC_ROOT_URL=http://localhost:3001# Construire et exécuter les conteneurs de développement
docker-compose up --build
# Accéder à l'application
http://localhost:3001- next: Framework React avec capacités SSR
- react & react-dom: Bibliothèque UI (v19.1.0)
- mysql2: Pilote de base de données MySQL
- uuidjs: Utilitaire de génération UUID
- typescript: Vérification de type et compilation
- tailwindcss: Framework CSS utility-first
- eslint: Linting et qualité du code
- @types/*: Définitions de types TypeScript