| | 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); |
| | }); |
| |
|