# Plateforme de formation — LMS & vente de formations (blended)

Plateforme web pour **vendre** des formations et les **animer en mode mixte (blended)** :
e-learning asynchrone + sessions live (présentiel / visio) + ateliers.

> **Première formation au catalogue** : *Maîtrise & Gouvernance de l'IA* (voir `../formation-ia/`).
> La plateforme est conçue pour accueillir **plusieurs formations** ensuite.

---

## 1. Stack technique

| Couche | Choix | Pourquoi |
|---|---|---|
| Langage | **PHP 8.2+** | Seul langage tournant à la fois sur OVH mutualisé ET en conteneur AKS |
| Framework | **Laravel 11** | Auth, paiements, back-office, e-learning : tout outillé |
| Interface | **Blade + Livewire 3** | Rendu serveur interactif, sans SPA séparée → 1 seul déploiement |
| Style | **Tailwind CSS** (build Vite en amont) | Assets compilés, pas besoin de Node en production |
| Base de données | **MySQL 8** (ou MariaDB 10.6+) | Disponible sur OVH mutualisé et Azure Database for MySQL |
| Paiement | **FedaPay** + **KkiaPay** (Mobile Money Afrique) | MTN MoMo, Moov Money, cartes — cibles Bénin/UEMOA |
| Files d'attente / cron | Driver `database` + cron (mutualisé) / worker pod (AKS) | Pas de démon requis sur mutualisé |
| Stockage médias | Local (mutualisé) ou **Azure Blob / OVH Object Storage** | Les vidéos ne vivent PAS sur l'hébergement mutualisé |

**Principe directeur** : un **monolithe Laravel server-rendered**. Il se déploie par
simple upload Git/FTP sur OVH mutualisé *et* se conteneurise pour AKS sans changer une ligne de code.

---

## 2. Comment le « blended / mixte » est modélisé

Le mixte n'est pas un type de cours figé : c'est une combinaison de **contenu e-learning**
et de **sessions planifiées**. Concrètement, dans le modèle de données :

- Une **`formation`** porte le contenu pédagogique : `modules` → `lessons`
  (vidéo, texte, quiz, document, ou jalon `live`).
- Une **`session_formation`** porte l'organisation d'une promo : un champ **`mode`**
  = `presentiel` | `visio` | `blended` | `elearning`, des **dates**, un **lieu** ou un
  **lien de visio**, une **capacité**, un **formateur**.
- Un apprenant s'**inscrit** (`enrollment`) à une formation, rattachée ou non à une session.
- Sa **progression** est suivie leçon par leçon (`lesson_completions`), et une
  **attestation** (`certificate`) est émise en fin de parcours.

→ Une même formation peut donc être vendue en **100 % e-learning** (sans session) **ou**
en **blended** (e-learning + une session datée présentiel/visio). Voir `database/schema.sql`.

---

## 3. Démarrage rapide (après installation de PHP 8.2+ et Composer)

Voir **`BOOTSTRAP.md`** pour la procédure complète. En résumé :

```bash
composer create-project laravel/laravel .
composer require livewire/livewire laravel/breeze
php artisan breeze:install blade
# importer le schéma métier
mysql -u root -p plateforme_formation < database/schema.sql
php artisan migrate
npm install && npm run build
php artisan serve
```

---

## 4. Organisation du dépôt

```
plateforme-formation/
├── README.md                ← ce fichier
├── BOOTSTRAP.md             ← commandes d'amorçage Laravel pas à pas
├── docs/
│   ├── ARCHITECTURE.md      ← architecture détaillée + arborescence cible
│   └── ROADMAP.md           ← jalons de réalisation
├── database/
│   └── schema.sql           ← schéma MySQL métier (DDL)
├── .env.example             ← variables d'environnement (DB, paiement, stockage)
└── deploy/
    ├── Dockerfile           ← image PHP-FPM + Nginx pour AKS
    ├── docker-entrypoint.sh
    ├── k8s/                 ← manifests Kubernetes (AKS)
    ├── OVH-MUTUALISE.md     ← procédure de déploiement mutualisé
    └── AKS-AZURE.md         ← procédure de déploiement AKS
```

> Les dossiers Laravel standard (`app/`, `routes/`, `resources/`, `database/migrations/`, …)
> seront créés par `composer create-project` lors de l'amorçage — voir `BOOTSTRAP.md`.

---

*Projet conçu par Gildas DJIMADJA — Architecte Cloud, Gouvernance & Stratégie Data.*
