edtech / docs /audit_tech_02052026.md
CognxSafeTrack
feat: centralize AI logic in @repo /ai-sdk, harmonize worker HTTP clients
2849f33

🛠️ Audit Dette Technique - 02 Mai 2026

🎯 Objectifs de la session

Modernisation de l'architecture CRM, unification des services d'IA dans un SDK partagé, et stabilisation du WhatsApp Worker pour le déploiement sur Railway.


✅ Erreurs & Problèmes résolus

1. Unification de l'IA (@repo/ai-sdk)

  • Problème : Logique d'IA dupliquée entre apps/api et apps/whatsapp-worker. Dépendance excessive du worker envers les endpoints de l'API.
  • Action : Création du package @repo/ai-sdk.
  • Résultat : Toute la logique (OpenAI, Gemini, Transcription, Prompting) est centralisée. L'injection de dépendances (prisma, redis, secrets) permet au worker de fonctionner de manière autonome.

2. Correction du Seed Prisma (Crash Railway)

  • Problème : Le build échouait car les scripts de seed créaient des Track sans organizationId, violant les contraintes multi-tenant.
  • Action : Mise à jour de packages/database/src/seed.ts pour récupérer/créer une organisation par défaut et l'injecter dans chaque Track.
  • Résultat : Build et Seed fonctionnels sur Railway.

3. Harmonisation HTTP du Worker

  • Problème : Utilisation éparse de fetch sans gestion d'erreur robuste, sans timeouts et sans logs uniformes.
  • Action : Création de apiClient et createWhatsAppClient via Axios.
  • Résultat : Remplacement de tous les fetch dans les handlers (InboundHandler, MediaHandler). Meilleure résilience et traçabilité.

4. Stabilisation du Build (TypeScript)

  • Problème : 88+ erreurs de compilation lors du build du SDK d'IA et du worker.
    • Absence de fichiers de déclaration (.d.ts).
    • Shadowing de variables (mimeType dans MediaHandler).
    • Paramètres inutilisés (noUnusedParameters).
  • Action :
    • Configuration composite: true et ajout de @types/node dans le SDK.
    • Refactorisation complète du MediaHandler pour clarifier les portées de variables.
    • Nettoyage des signatures de fonctions dans ai-pedagogy.ts.
  • Résultat : Le build passe désormais à 100% (pnpm turbo run build success).

⏳ Ce qu'il reste à régler (Dette Résiduelle)

1. Nettoyage des fichiers redondants

  • Certains fichiers dans apps/api/src/services/ai/ ont été supprimés, mais une vérification finale est nécessaire pour s'assurer qu'aucun résidu de l'ancienne implémentation ne persiste dans l'arborescence.

2. Migration du Stockage (Storage SDK)

  • Le SDK d'IA dépend encore de certains endpoints API pour le stockage (ex: store-audio). Pour une autonomie totale, une abstraction @repo/storage-sdk devrait être envisagée.

🚀 État Actuel : LE PROBLÈME BLOQUANT

Statut : RÉSOLU. Le problème bloquant était une erreur de compilation TypeScript dans le MediaHandler du worker concernant l'accès à la propriété mimeType. Malgré un cast any, le compilateur restait bloqué sur une version mise en cache ou mal interprétée.

  • Solution finale : Réécriture complète de la fonction handle du MediaHandler avec une extraction explicite des données et un build forcé sans cache.

L'architecture est maintenant prête pour un déploiement de production serein.