File size: 1,949 Bytes
082d3db | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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);
});
|