import { PrismaClient } from "@prisma/client"; import fs from "fs"; import { generateUniqueFileName, getProfileImagePath, getProfileImageUrl, extractFileNameFromUrl, } from "../src/lib/server-utils"; const prisma = new PrismaClient(); async function cleanupProfileImages() { try { console.log("🧹 Iniciando limpieza de imágenes de perfil..."); // Obtener todos los usuarios con imágenes de perfil const users = await prisma.user.findMany({ where: { profileImage: { not: null, }, }, select: { id: true, profileImage: true, }, }); console.log( `📊 Encontrados ${users.length} usuarios con imágenes de perfil` ); for (const user of users) { if (!user.profileImage) continue; try { // Extraer nombre del archivo actual const currentFileName = extractFileNameFromUrl(user.profileImage); if (!currentFileName) { console.log( `⚠️ Usuario ${user.id}: No se pudo extraer nombre de archivo de ${user.profileImage}` ); continue; } const currentFilePath = getProfileImagePath(currentFileName); // Verificar si el archivo existe if (!fs.existsSync(currentFilePath)) { console.log( `⚠️ Usuario ${user.id}: Archivo no encontrado: ${currentFileName}` ); continue; } // Verificar si el nombre ya está en el nuevo formato (más corto) if (currentFileName.length < 50) { console.log( `✅ Usuario ${user.id}: Nombre ya optimizado: ${currentFileName}` ); continue; } // Leer el archivo actual const fileBuffer = fs.readFileSync(currentFilePath); // Generar nuevo nombre optimizado const newFileName = generateUniqueFileName(currentFileName); const newFilePath = getProfileImagePath(newFileName); // Guardar con nuevo nombre fs.writeFileSync(newFilePath, fileBuffer); // Eliminar archivo anterior fs.unlinkSync(currentFilePath); // Actualizar en la base de datos const newImageUrl = getProfileImageUrl(newFileName); await prisma.user.update({ where: { id: user.id }, data: { profileImage: newImageUrl }, }); console.log( `✅ Usuario ${user.id}: ${currentFileName} → ${newFileName}` ); } catch (error) { console.error(`❌ Error procesando usuario ${user.id}:`, error); } } console.log("🎉 Limpieza completada"); } catch (error) { console.error("❌ Error en limpieza:", error); } finally { await prisma.$disconnect(); } } // Ejecutar si se llama directamente if (require.main === module) { cleanupProfileImages() .then(() => { console.log("✅ Script completado"); process.exit(0); }) .catch((error) => { console.error("❌ Error:", error); process.exit(1); }); } export { cleanupProfileImages };