# Guide d'Installation Rapide

## Installation en 5 minutes

Ce guide vous permet d'installer et de démarrer l'application rapidement en environnement de développement.

---

## Prérequis

Avant de commencer, assurez-vous d'avoir installé :

- **Node.js 22+** : [Télécharger Node.js](https://nodejs.org/)
- **MySQL 8.0+** ou **MariaDB 10.6+** : [Télécharger MySQL](https://dev.mysql.com/downloads/)
- **Git** (optionnel) : [Télécharger Git](https://git-scm.com/)

---

## Étape 1 : Récupérer le projet

### Option A : Depuis l'archive ZIP

```bash
# Extraire l'archive
unzip formation-manager-itinova.zip
cd formation-manager-itinova
```

### Option B : Depuis Git (si disponible)

```bash
# Cloner le dépôt
git clone <url-du-depot>
cd formation-manager-itinova
```

---

## Étape 2 : Installer les dépendances

```bash
# Installer pnpm si nécessaire
npm install -g pnpm

# Installer les dépendances du projet
pnpm install
```

---

## Étape 3 : Configurer la base de données

### 3.1 Créer la base de données

```bash
# Se connecter à MySQL
mysql -u root -p

# Créer la base de données
CREATE DATABASE formation_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# Créer un utilisateur dédié (optionnel mais recommandé)
CREATE USER 'formation_user'@'localhost' IDENTIFIED BY 'votre_mot_de_passe_securise';
GRANT ALL PRIVILEGES ON formation_manager.* TO 'formation_user'@'localhost';
FLUSH PRIVILEGES;

# Quitter MySQL
EXIT;
```

### 3.2 Configurer les variables d'environnement

Créer un fichier `.env` à la racine du projet :

```env
# Base de données
DATABASE_URL=mysql://formation_user:votre_mot_de_passe_securise@localhost:3306/formation_manager

# JWT Secret (générer une clé aléatoire)
JWT_SECRET=votre_cle_secrete_aleatoire_tres_longue_minimum_32_caracteres

# Application
VITE_APP_TITLE=Gestion des Formations Manager Itinova
VITE_APP_LOGO=/logo.svg
NODE_ENV=development
```

**Note** : Pour générer une clé JWT sécurisée, vous pouvez utiliser :

```bash
# Linux/Mac
openssl rand -base64 32

# Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
```

### 3.3 Initialiser la base de données

```bash
# Appliquer les migrations (créer les tables)
pnpm db:push
```

---

## Étape 4 : Démarrer l'application

```bash
# Lancer le serveur de développement
pnpm dev
```

L'application sera accessible à l'adresse : **http://localhost:3000**

---

## Étape 5 : Première connexion

### Connexion avec l'utilisateur administrateur local

1. Ouvrir **http://localhost:3000** dans votre navigateur
2. Cliquer sur **"Se connecter localement"**
3. Utiliser les identifiants par défaut :
   - **Identifiant** : `adminServFormation`
   - **Mot de passe** : `Itinova69!`

**Important** : Cet utilisateur est créé automatiquement au premier lancement et ne peut pas être supprimé.

---

## Configuration initiale

Une fois connecté, vous pouvez :

### 1. Configurer l'envoi d'emails (optionnel)

1. Créer un compte sur [Resend](https://resend.com)
2. Générer une clé API
3. Dans l'application, aller dans **Configuration SMTP**
4. Saisir :
   - **Clé API Resend** : votre clé API
   - **Email expéditeur** : votre email vérifié
   - **Nom de l'expéditeur** : Itinova Formation
5. Activer le mode **Production**

### 2. Créer des utilisateurs supplémentaires

1. Aller dans **Utilisateurs**
2. Cliquer sur **Ajouter un utilisateur**
3. Remplir les informations :
   - Nom d'utilisateur
   - Mot de passe
   - Email
   - Rôle (admin ou user)

### 3. Créer vos premières formations

1. Aller dans **Formations**
2. Cliquer sur **Nouvelle formation**
3. Remplir les informations de la formation
4. Créer des séquences associées

### 4. Importer les apprenants

1. Aller dans **Apprenants**
2. Ajouter les apprenants un par un ou créer un script d'import

---

## Commandes utiles

```bash
# Démarrer le serveur de développement
pnpm dev

# Builder pour la production
pnpm build

# Démarrer en mode production
pnpm start

# Appliquer les migrations
pnpm db:push

# Générer les migrations (après modification du schéma)
pnpm db:generate

# Ouvrir Drizzle Studio (interface graphique pour la base de données)
pnpm db:studio
```

---

## Structure du projet

```
formation-manager-itinova/
├── client/                 # Application frontend (React)
│   ├── public/            # Fichiers statiques
│   └── src/
│       ├── pages/         # Pages de l'application
│       ├── components/    # Composants réutilisables
│       └── lib/           # Bibliothèques et utilitaires
├── server/                # Application backend (Express + tRPC)
│   ├── routers.ts         # Définition des routes API
│   ├── db.ts              # Fonctions d'accès à la base de données
│   └── _core/             # Configuration du serveur
├── drizzle/               # Schéma et migrations de base de données
│   └── schema.ts          # Définition des tables
├── shared/                # Code partagé entre client et serveur
├── .env                   # Variables d'environnement (à créer)
├── package.json           # Dépendances du projet
├── deploy.sh              # Script de déploiement automatique
├── DEPLOYMENT.md          # Guide de déploiement complet
└── README.md              # Documentation principale
```

---

## Dépannage rapide

### L'application ne démarre pas

**Erreur : "Cannot find module"**
```bash
# Réinstaller les dépendances
rm -rf node_modules
pnpm install
```

**Erreur : "ECONNREFUSED" (connexion à la base de données)**
```bash
# Vérifier que MySQL est démarré
sudo systemctl status mysql

# Vérifier l'URL de connexion dans .env
cat .env | grep DATABASE_URL
```

### Les migrations échouent

```bash
# Vérifier que la base de données existe
mysql -u root -p -e "SHOW DATABASES;"

# Recréer la base de données si nécessaire
mysql -u root -p -e "DROP DATABASE IF EXISTS formation_manager; CREATE DATABASE formation_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# Réappliquer les migrations
pnpm db:push
```

### Impossible de se connecter

**Vérifier que JWT_SECRET est défini**
```bash
cat .env | grep JWT_SECRET
```

Si vide, générer une nouvelle clé :
```bash
echo "JWT_SECRET=$(openssl rand -base64 32)" >> .env
```

---

## Prochaines étapes

Une fois l'installation terminée :

1. **Lire la documentation complète** : `DEPLOYMENT.md`
2. **Personnaliser les templates d'emails** : Menu "Templates d'emails"
3. **Configurer les rappels automatiques** : Menu "Rappels"
4. **Tester l'envoi d'emails** : Configuration SMTP
5. **Déployer en production** : Suivre le guide `DEPLOYMENT.md`

---

## Support

Pour toute question ou problème :

- Consulter `DEPLOYMENT.md` pour la documentation complète
- Vérifier les logs de l'application
- Contacter l'équipe de développement

---

**Bon déploiement ! 🚀**
