Files
perfil/nuxt4/server/api/share-target/cleanup.post.ts
josedario87 5bb5e5092e
Some checks failed
build-and-deploy / build-and-deploy (push) Has been cancelled
Implementar Web Share Target API para compartir fotos con la PWA
- Agregar share_target al manifest de la PWA
- Crear endpoint /api/share-target para recibir archivos compartidos
- Guardar archivos temporalmente en /public/temp-shared
- Modificar UserProfileForm para aceptar imágenes externas
- Detectar automáticamente imágenes compartidas y procesarlas
- Crear endpoint /api/share-target/cleanup para limpiar temporales
- Mostrar toast informativo al recibir imagen compartida
- Redirigir automáticamente al formulario de perfil
- Soportar compartir desde galería, otras apps, etc.
2025-10-17 18:29:00 -06:00

69 lines
1.8 KiB
TypeScript

/**
* API endpoint para limpiar archivos temporales de Web Share Target
* POST /api/share-target/cleanup
*
* Elimina archivos temporales después de ser procesados
*/
import { promises as fs } from 'fs'
import { join } from 'path'
export default defineEventHandler(async (event) => {
try {
const body = await readBody(event)
const { imageUrl } = body
if (!imageUrl || typeof imageUrl !== 'string') {
throw createError({
statusCode: 400,
message: 'imageUrl es requerido'
})
}
// Extraer el filename de la URL (/temp-shared/filename.jpg)
const filename = imageUrl.split('/').pop()
if (!filename || !filename.startsWith('shared-')) {
throw createError({
statusCode: 400,
message: 'URL de imagen inválida'
})
}
// Construir ruta completa del archivo
const filepath = join(process.cwd(), 'public', 'temp-shared', filename)
// Intentar eliminar el archivo
try {
await fs.unlink(filepath)
console.log(`🗑️ Archivo temporal eliminado: ${filename}`)
return {
success: true,
message: 'Archivo temporal eliminado correctamente'
}
} catch (err: any) {
// Si el archivo no existe, no es un error crítico
if (err.code === 'ENOENT') {
console.log(`⚠️ Archivo temporal ya no existe: ${filename}`)
return {
success: true,
message: 'Archivo ya había sido eliminado'
}
}
throw err
}
} catch (error: any) {
console.error('Error en cleanup de share-target:', error)
// Re-throw si ya es un error de createError
if (error.statusCode) {
throw error
}
throw createError({
statusCode: 500,
message: error.message || 'Error al eliminar archivo temporal'
})
}
})