import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function injectMissingImages() { console.log("🖼️ Démarrage de l'injection des visuels manquants..."); const tracks = await prisma.track.findMany({ include: { days: true } }); let imagesInjected = 0; for (const track of tracks) { // Find sector generic name const sectorStr = track.title.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]/g, "_"); let fallbackUrl = `https://r2.xamle.sn/branding/${sectorStr}_generic.png`; // If it's the core tracks, we might just use a general fallback if sector isn't in title if (track.id.startsWith("T")) { fallbackUrl = 'https://r2.xamle.sn/branding/general_generic.png'; if (track.title.toLowerCase().includes("restauration")) fallbackUrl = 'https://r2.xamle.sn/branding/restauration_generic.png'; if (track.title.toLowerCase().includes("couture")) fallbackUrl = 'https://r2.xamle.sn/branding/couture_generic.png'; } else { fallbackUrl = `https://r2.xamle.sn/branding/${sectorStr}_generic.png`; } for (const day of track.days) { // Specifically fixing days 5, 8, 10 and any other day missing visuals if (!day.imageUrl && !day.videoUrl) { await prisma.trackDay.update({ where: { id: day.id }, data: { imageUrl: fallbackUrl } }); console.log(`✅ Injected generic image for Track ${track.id} Day ${day.dayNumber}`); imagesInjected++; } } } console.log(`\n🎉 Injection terminée ! ${imagesInjected} images de secours (Couture, Restauration...) ajoutées en BDD.`); await prisma.$disconnect(); } injectMissingImages().catch(e => { console.error(e); process.exit(1); });