CognxSafeTrack
docs: add audit_production.md + plan_implementation_prod.md; fix admin phone field
f1a06cd | # Plan d'Implémentation Production | |
| *Priorité : du plus bloquant au moins urgent* | |
| --- | |
| ## Phase 1 — Déploiement Railway opérationnel (immediat) | |
| > Objectif : Railway répond, webhook Meta validé, premiers messages reçoivent une réponse. | |
| ### Étape 1.1 — Variables Railway (manuel, 5 min) | |
| 1. **Supprimer** `DISABLE_WHATSAPP_SEND` | |
| 2. **Ajouter** `WHATSAPP_APP_SECRET` (Meta App → Basic Settings → App Secret) | |
| 3. Vérifier que `API_URL` = `https://whatsapp-worker-production-0bc0.up.railway.app` | |
| ### Étape 1.2 — Valider le webhook Meta (manuel, 2 min) | |
| 1. Attendre fin du redéploiement Railway (logs : `Server listening on http://0.0.0.0:3001`) | |
| 2. Tester : `curl https://whatsapp-worker-production-0bc0.up.railway.app/` → `{"ok":true}` | |
| 3. Meta Developers → WhatsApp → Configuration → Webhook → Retenter la validation | |
| ### Étape 1.3 — Créer le contenu pédagogique (base de données) | |
| Le flow complet nécessite au moins **1 Track avec 3+ TrackDays**. À insérer via l'endpoint seed existant (`SEED_DATA`) ou directement en base : | |
| - Envoyer `SEED_DATA` depuis WhatsApp (déclencheur existant dans `whatsapp.ts`) | |
| --- | |
| ## Phase 2 — Corriger les bugs d'interface (1-2 jours) | |
| ### Étape 2.1 — Fix Admin App : champ `whatsappId` → `phone` | |
| **Fichier** : `apps/admin/src/App.tsx` lignes 164, 237 | |
| ```diff | |
| - env.user?.whatsappId || 'Unknown' | |
| + env.user?.phone || 'Unknown' | |
| ``` | |
| ### Étape 2.2 — Fix Web App : portail étudiant factice | |
| **Fichier** : `apps/web/src/App.tsx` — fonction `handleLogin` | |
| Implémenter l'authentification réelle : | |
| - Appel API avec le numéro de téléphone | |
| - Retour des documents générés (OnePager, PitchDeck) via liens R2 | |
| ### Étape 2.3 — Page de succès Stripe | |
| Créer une page `/payment/success` dans `apps/web` qui : | |
| - Confirme le paiement à l'utilisateur | |
| - Affiche un lien vers WhatsApp pour commencer | |
| --- | |
| ## Phase 3 — Gestion de contenu admin (3-5 jours) | |
| ### Étape 3.1 — API backend : routes Track/TrackDay | |
| **Fichier** : `apps/api/src/routes/admin.ts` | |
| Ajouter : | |
| ```typescript | |
| POST /v1/admin/tracks // Créer un track | |
| PUT /v1/admin/tracks/:id // Modifier | |
| POST /v1/admin/tracks/:id/days // Ajouter un TrackDay | |
| PUT /v1/admin/tracks/:id/days/:dayId | |
| DELETE /v1/admin/tracks/:id | |
| ``` | |
| ### Étape 3.2 — Interface admin : Content Manager | |
| **Fichier** : `apps/admin/src/App.tsx` | |
| Ajouter une vue "Content" dans le sidebar : | |
| - Liste des Tracks avec bouton Créer/Modifier | |
| - Pour chaque Track : liste des jours avec éditeur de texte + upload audio | |
| --- | |
| ## Phase 4 — Améliorations qualité (optionnel) | |
| ### Étape 4.1 — Unifier Enrollment / UserProgress | |
| Les deux tables doublonnent `currentDay`. Migrer vers `UserProgress` uniquement et retirer `currentDay` de `Enrollment`. | |
| ### Étape 4.2 — Logger les messages entrants (modèle Message) | |
| Le modèle `Message` en base n'est jamais rempli. Ajouter un `prisma.message.create()` dans `handleIncomingMessage`. | |
| ### Étape 4.3 — Scheduler : vérification état avant envoi | |
| Dans `scheduler.ts`, avant d'envoyer la leçon du jour, vérifier que l'enrollment est `ACTIVE` et que le `currentDay` correspond. | |
| ### Étape 4.4 — Variables VITE_API_URL dans les apps frontend | |
| S'assurer que `VITE_API_URL` est configuré dans les `.env` de production de `apps/admin` et `apps/web`. | |
| --- | |
| ## Résumé des priorités | |
| ``` | |
| ✅ FAIT → API + Worker Railway, todos les bugs WhatsApp fixés | |
| 🔴 CRITIQUE → Supprimer DISABLE_WHATSAPP_SEND, ajouter WHATSAPP_APP_SECRET | |
| 🟠 IMPORTANT → Valider webhook Meta, créer contenu (SEED_DATA) | |
| 🟡 SOON → Fix admin phone field, portail étudiant réel | |
| 🟢 OPTIONNEL → Stripe live, content manager admin, Message logging | |
| ``` | |