Skip to content

Nathan-Toigo/8INF876-Cloud-Exo1

Repository files navigation

Calculateur d'IMC - Architecture d'Application Cloud

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

🐳 Infrastructure Docker

Services de Conteneurs

L'application est orchestrée en utilisant Docker Compose avec les services suivants :

1. Service de Base de données (db)

  • 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

2. Service d'Application Web (website)

  • 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

📊 Schéma de Base de Données

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'enregistrement

Le calcul de l'IMC devant être fait côté serveur, la valeur est stockée pour le pas à la recalculer à chaque demande du client.

🔌 API Endpoints

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

🎨 Architecture Frontend - Structure

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 d'Environnement

Variables d'Environnement Requises

# 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

🚀 Options de Déploiement

Environnement de Développement

# Construire et exécuter les conteneurs de développement
docker-compose up --build

# Accéder à l'application
http://localhost:3001

📦 Dépendances et Outils

Dépendances de Production

  • 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

Dépendances de Développement

  • typescript: Vérification de type et compilation
  • tailwindcss: Framework CSS utility-first
  • eslint: Linting et qualité du code
  • @types/*: Définitions de types TypeScript

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors