| import { PrismaClient } from '@prisma/client'; |
|
|
| const prisma = new PrismaClient(); |
|
|
| async function runAudit() { |
| console.log("🔍 Démarrage de l'audit d'inventaire XAMLÉ V1..."); |
| console.log("================================================="); |
|
|
| const tracks = await prisma.track.findMany({ |
| include: { |
| days: { |
| orderBy: { dayNumber: 'asc' } |
| } |
| } |
| }); |
|
|
| const report: { |
| secteur: string; |
| lang: string; |
| day: number; |
| errors: string[] |
| }[] = []; |
|
|
| |
| |
|
|
| for (const track of tracks) { |
| |
| const lang = track.language || (track.id.endsWith('-WO') ? 'WOLOF' : 'FR'); |
|
|
| for (const day of track.days) { |
| const errors: string[] = []; |
|
|
| |
| if (lang === 'WOLOF' && !day.audioUrl) { |
| errors.push("🎵 Audio manquant (Obligatoire en Wolof)"); |
| } |
|
|
| |
| if (!day.imageUrl && !day.videoUrl) { |
| errors.push("🖼️ Visuel manquant (Image ou Vidéo absente)"); |
| } |
|
|
| |
| |
| if (day.buttonsJson) { |
| try { |
| |
| |
| } catch (e) { |
| errors.push("⚠️ JSON Multilingue Invalide (buttonsJson corrompu)"); |
| } |
| } |
|
|
| |
| if (day.dayNumber === 12) { |
| let hasPitchTrigger = false; |
| |
| if (day.badges && JSON.stringify(day.badges).includes("PITCH_DECK")) hasPitchTrigger = true; |
| if (day.badges && JSON.stringify(day.badges).includes("PITCH_AI")) hasPitchTrigger = true; |
| if (day.badges && JSON.stringify(day.badges).includes("DOCUMENT")) hasPitchTrigger = true; |
| if (JSON.stringify(day.buttonsJson || "").includes("DOCUMENT_GENERATION")) hasPitchTrigger = true; |
|
|
| if (!hasPitchTrigger) { |
| |
| errors.push(`📝 Métadonnées Pitch Deck (fin de parcours) absentes (Badges: ${JSON.stringify(day.badges)})`); |
| } |
| } |
|
|
| if (errors.length > 0) { |
| report.push({ |
| secteur: track.title, |
| lang, |
| day: day.dayNumber, |
| errors |
| }); |
| } |
| } |
| } |
|
|
| console.log(`\n📋 RÉSULTAT DU SCAN : ${report.length} problèmes trouvés.\n`); |
|
|
| |
| for (const item of report) { |
| console.log(`[${item.lang}] ${item.secteur} - Jour ${item.day} :`); |
| item.errors.forEach(err => console.log(` ❌ ${err}`)); |
| console.log("-".repeat(40)); |
| } |
|
|
| if (report.length === 0) { |
| console.log("✅ Audit parfait ! Tous les parcours sont complets et prêts pour la V1."); |
| } |
|
|
| await prisma.$disconnect(); |
| } |
|
|
| runAudit().catch(e => { |
| console.error(e); |
| process.exit(1); |
| }); |
|
|