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