diff --git a/INSTRUCTIONS-DEPLOIEMENT.md b/INSTRUCTIONS-DEPLOIEMENT.md new file mode 100644 index 0000000..f4ee331 --- /dev/null +++ b/INSTRUCTIONS-DEPLOIEMENT.md @@ -0,0 +1,234 @@ +# Instructions de dĂ©ploiement - Formation Manager Itinova + +Version: **d0d9d870** +Date: 3 janvier 2025 + +## đ RĂ©sumĂ© des modifications + +Cette mise Ă jour contient les corrections suivantes : + +1. **Bug d'inscription - Mauvais apprenant associĂ©** + - CrĂ©ation d'une procĂ©dure publique `apprenants.createPublic` + - Les inscriptions depuis la page publique fonctionnent correctement + +2. **Bug email de confirmation - Variables non remplacĂ©es** + - Correction du template d'inscription dans la base de donnĂ©es + - Ajout de la variable `{{datesHTML}}` dans l'objet variables + - Toutes les variables sont maintenant correctement remplacĂ©es + +3. **AmĂ©lioration de l'interface des templates d'emails** + - Ajout du bouton `{{datesHTML}}` dans l'Ă©diteur + - PrĂ©visualisation amĂ©liorĂ©e avec exemple de dates formatĂ©es + +--- + +## đ DĂ©ploiement automatique (recommandĂ©) + +### PrĂ©requis +- AccĂšs SSH au serveur VPS +- Git configurĂ© avec accĂšs au dĂ©pĂŽt +- PM2 installĂ© pour la gestion du processus +- pnpm installĂ© + +### Ătapes + +1. **Se connecter au serveur VPS** + ```bash + ssh votre-utilisateur@votre-serveur.com + ``` + +2. **Aller dans le rĂ©pertoire du projet** + ```bash + cd /chemin/vers/formation-manager-itinova + ``` + +3. **Rendre le script exĂ©cutable** + ```bash + chmod +x deploy-update.sh + ``` + +4. **ExĂ©cuter le script de mise Ă jour** + ```bash + ./deploy-update.sh + ``` + +Le script va automatiquement : +- â Sauvegarder la base de donnĂ©es +- â ArrĂȘter le serveur +- â RĂ©cupĂ©rer les derniĂšres modifications +- â Installer les dĂ©pendances +- â Appliquer les migrations +- â Compiler le projet +- â RedĂ©marrer le serveur + +--- + +## đ§ DĂ©ploiement manuel + +Si vous prĂ©fĂ©rez effectuer la mise Ă jour manuellement : + +### 1. Sauvegarde de la base de donnĂ©es + +```bash +# CrĂ©er un rĂ©pertoire de backup +mkdir -p backups + +# Sauvegarder la base de donnĂ©es +mysqldump -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE > backups/db-backup-$(date +%Y%m%d-%H%M%S).sql +``` + +### 2. ArrĂȘter le serveur + +```bash +pm2 stop formation-manager +``` + +### 3. RĂ©cupĂ©rer les modifications + +```bash +git fetch origin +git checkout main +git pull origin main +``` + +### 4. Installer les dĂ©pendances + +```bash +pnpm install +``` + +### 5. Appliquer les migrations de base de donnĂ©es + +```bash +pnpm db:push +``` + +**OU** appliquer manuellement le script SQL : + +```bash +mysql -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE < update-database.sql +``` + +### 6. Compiler le projet + +```bash +pnpm build +``` + +### 7. RedĂ©marrer le serveur + +```bash +pm2 restart formation-manager +# OU si c'est le premier dĂ©marrage : +pm2 start npm --name "formation-manager" -- start +``` + +### 8. VĂ©rifier le statut + +```bash +pm2 status formation-manager +pm2 logs formation-manager --lines 50 +``` + +--- + +## đ§Ș Tests aprĂšs dĂ©ploiement + +AprĂšs le dĂ©ploiement, vĂ©rifiez que tout fonctionne correctement : + +### 1. Test d'inscription publique +- [ ] Aller sur la page d'inscription publique d'une formation +- [ ] CrĂ©er une nouvelle inscription avec un nouvel apprenant +- [ ] VĂ©rifier que l'apprenant est correctement créé dans la base de donnĂ©es +- [ ] VĂ©rifier que l'inscription est associĂ©e au bon apprenant + +### 2. Test de l'email de confirmation +- [ ] Effectuer une inscription +- [ ] VĂ©rifier la rĂ©ception de l'email de confirmation +- [ ] VĂ©rifier que toutes les variables sont remplacĂ©es (notamment `{{prenomApprenant}}` et `{{datesHTML}}`) +- [ ] VĂ©rifier que les invitations ICS sont jointes (une par date) + +### 3. Test de l'interface des templates +- [ ] Aller dans Configuration > Templates d'emails +- [ ] VĂ©rifier que le bouton "Dates (HTML)" est prĂ©sent +- [ ] Cliquer sur le bouton pour insĂ©rer `{{datesHTML}}` +- [ ] VĂ©rifier la prĂ©visualisation + +--- + +## đ VĂ©rification de la base de donnĂ©es + +Pour vĂ©rifier que la mise Ă jour du template d'inscription a Ă©tĂ© appliquĂ©e : + +```sql +SELECT + type, + name, + bodyContent, + updatedAt +FROM emailTemplates +WHERE type = 'inscription'; +``` + +Le `bodyContent` doit contenir les variables `{{prenomApprenant}}`, `{{nomApprenant}}`, et `{{datesHTML}}`. + +--- + +## đ Rollback (en cas de problĂšme) + +Si vous rencontrez des problĂšmes aprĂšs la mise Ă jour : + +### 1. Restaurer la base de donnĂ©es + +```bash +# Lister les sauvegardes disponibles +ls -lh backups/ + +# Restaurer une sauvegarde +mysql -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE < backups/db-backup-YYYYMMDD-HHMMSS.sql +``` + +### 2. Revenir Ă la version prĂ©cĂ©dente du code + +```bash +# Voir l'historique des commits +git log --oneline + +# Revenir au commit prĂ©cĂ©dent +git checkout COMMIT_HASH + +# RĂ©installer les dĂ©pendances +pnpm install + +# Recompiler +pnpm build + +# RedĂ©marrer +pm2 restart formation-manager +``` + +--- + +## đ Support + +En cas de problĂšme lors du dĂ©ploiement : + +1. Consulter les logs du serveur : `pm2 logs formation-manager` +2. VĂ©rifier l'Ă©tat du serveur : `pm2 status` +3. VĂ©rifier les logs de la base de donnĂ©es +4. Contacter le support technique + +--- + +## đ Notes importantes + +- **Sauvegarde automatique** : Le script `deploy-update.sh` crĂ©e automatiquement une sauvegarde de la base de donnĂ©es avant toute modification +- **Temps d'arrĂȘt** : Le dĂ©ploiement nĂ©cessite un arrĂȘt temporaire du serveur (environ 2-3 minutes) +- **Variables d'environnement** : Assurez-vous que toutes les variables d'environnement nĂ©cessaires sont correctement configurĂ©es (DATABASE_URL, RESEND_API_KEY, etc.) +- **Permissions** : Le script doit ĂȘtre exĂ©cutĂ© avec les permissions appropriĂ©es pour accĂ©der Ă la base de donnĂ©es et redĂ©marrer PM2 + +--- + +**Version du checkpoint** : d0d9d870 +**Date de crĂ©ation** : 3 janvier 2025 +**Auteur** : Manus AI diff --git a/deploy-update.sh b/deploy-update.sh new file mode 100755 index 0000000..59ed616 --- /dev/null +++ b/deploy-update.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +# Script de mise Ă jour pour le serveur VPS +# Formation Manager Itinova +# Version: d0d9d870 + +set -e # ArrĂȘter en cas d'erreur + +echo "=========================================" +echo "Mise Ă jour Formation Manager Itinova" +echo "=========================================" +echo "" + +# Couleurs pour les messages +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# VĂ©rifier que nous sommes dans le bon rĂ©pertoire +if [ ! -f "package.json" ]; then + echo -e "${RED}Erreur: package.json non trouvĂ©. Ătes-vous dans le bon rĂ©pertoire ?${NC}" + exit 1 +fi + +echo -e "${YELLOW}1. Sauvegarde de la base de donnĂ©es...${NC}" +# CrĂ©er un rĂ©pertoire de backup s'il n'existe pas +mkdir -p backups +BACKUP_FILE="backups/db-backup-$(date +%Y%m%d-%H%M%S).sql" + +# Extraire les informations de connexion depuis DATABASE_URL +# Format: mysql://user:password@host:port/database +if [ -z "$DATABASE_URL" ]; then + echo -e "${RED}Erreur: DATABASE_URL n'est pas dĂ©finie${NC}" + exit 1 +fi + +# Parser DATABASE_URL +DB_USER=$(echo $DATABASE_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p') +DB_PASS=$(echo $DATABASE_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p') +DB_HOST=$(echo $DATABASE_URL | sed -n 's/.*@\([^:]*\):.*/\1/p') +DB_PORT=$(echo $DATABASE_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p') +DB_NAME=$(echo $DATABASE_URL | sed -n 's/.*\/\([^?]*\).*/\1/p') + +echo "Sauvegarde de la base de donnĂ©es $DB_NAME..." +mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_FILE" +echo -e "${GREEN}â Sauvegarde créée: $BACKUP_FILE${NC}" +echo "" + +echo -e "${YELLOW}2. ArrĂȘt du serveur...${NC}" +pm2 stop formation-manager || echo "Le serveur n'Ă©tait pas dĂ©marrĂ©" +echo -e "${GREEN}â Serveur arrĂȘtĂ©${NC}" +echo "" + +echo -e "${YELLOW}3. RĂ©cupĂ©ration des derniĂšres modifications...${NC}" +git fetch origin +git checkout main +git pull origin main +echo -e "${GREEN}â Code mis Ă jour${NC}" +echo "" + +echo -e "${YELLOW}4. Installation des dĂ©pendances...${NC}" +pnpm install +echo -e "${GREEN}â DĂ©pendances installĂ©es${NC}" +echo "" + +echo -e "${YELLOW}5. Application des migrations de base de donnĂ©es...${NC}" +pnpm db:push +echo -e "${GREEN}â Migrations appliquĂ©es${NC}" +echo "" + +echo -e "${YELLOW}6. Compilation du projet...${NC}" +pnpm build +echo -e "${GREEN}â Projet compilĂ©${NC}" +echo "" + +echo -e "${YELLOW}7. RedĂ©marrage du serveur...${NC}" +pm2 restart formation-manager || pm2 start npm --name "formation-manager" -- start +echo -e "${GREEN}â Serveur redĂ©marrĂ©${NC}" +echo "" + +echo -e "${YELLOW}8. VĂ©rification du statut...${NC}" +pm2 status formation-manager +echo "" + +echo -e "${GREEN}=========================================${NC}" +echo -e "${GREEN}Mise Ă jour terminĂ©e avec succĂšs !${NC}" +echo -e "${GREEN}=========================================${NC}" +echo "" +echo "Sauvegarde de la base de donnĂ©es: $BACKUP_FILE" +echo "Pour consulter les logs: pm2 logs formation-manager" +echo "Pour arrĂȘter le serveur: pm2 stop formation-manager" +echo "" diff --git a/update-database.sql b/update-database.sql new file mode 100644 index 0000000..4b87c79 --- /dev/null +++ b/update-database.sql @@ -0,0 +1,44 @@ +-- Script de mise Ă jour de la base de donnĂ©es +-- Formation Manager Itinova +-- Version: d0d9d870 +-- Date: 2025-01-03 + +-- Ce script contient les modifications de la base de donnĂ©es nĂ©cessaires +-- pour cette version + +-- ============================================ +-- Mise Ă jour du template d'inscription +-- ============================================ + +-- Mettre Ă jour le bodyContent du template d'inscription +-- pour utiliser les bonnes variables +UPDATE emailTemplates +SET bodyContent = '
Cher(e) {{prenomApprenant}} {{nomApprenant}},
Votre inscription à la formation {{nomFormation}} (séquence {{nomSequence}}) a bien été enregistrée.
Lieu : {{lieu}}
Dates :
{{datesHTML}}Vous recevrez prochainement les invitations Outlook pour bloquer votre agenda.
Ă bientĂŽt !
', + updatedAt = NOW() +WHERE type = 'inscription'; + +-- Vérifier que la mise à jour a été effectuée +SELECT + type, + name, + SUBSTRING(bodyContent, 1, 100) as bodyContent_preview, + updatedAt +FROM emailTemplates +WHERE type = 'inscription'; + +-- ============================================ +-- Notes importantes +-- ============================================ + +-- 1. La procédure publique apprenants.createPublic a été ajoutée dans le code +-- (pas de modification SQL nécessaire, c'est une procédure tRPC) + +-- 2. La variable {{datesHTML}} est maintenant disponible dans tous les templates +-- d'emails pour afficher la liste formatée des dates + +-- 3. Les invitations ICS sont générées automatiquement pour chaque date +-- de la séquence lors de l'envoi de l'email de confirmation + +-- ============================================ +-- Fin du script +-- ============================================