/** * Endpoint para obtener notificaciones pendientes para el usuario actual * * Este endpoint permite al cliente hacer polling para obtener notificaciones * generadas por el backend que aún no han sido entregadas. * * Casos de uso: * - Polling periódico para obtener nuevas notificaciones * - Sincronización inicial al cargar la aplicación */ // En memoria: cola de notificaciones por usuario // Nota: En producción, esto debería estar en Redis o una BD const notificationQueue = new Map() export default defineEventHandler(async (event) => { try { // Leer el usuario actual de los headers de Authentik const headers = getHeaders(event) const userId = headers['x-authentik-uid'] const username = headers['x-authentik-username'] // Verificar que el usuario esté autenticado if (!userId) { throw createError({ statusCode: 401, statusMessage: 'Usuario no autenticado' }) } // Obtener notificaciones pendientes para este usuario const pendingNotifications = notificationQueue.get(userId) || [] // Limpiar la cola después de entregarlas notificationQueue.delete(userId) return { success: true, notifications: pendingNotifications, count: pendingNotifications.length, user: { uid: userId, username } } } catch (error: any) { console.error('Error al obtener notificaciones:', error) // Si ya es un error de H3, relanzarlo if (error.statusCode) { throw error } // Error genérico throw createError({ statusCode: 500, statusMessage: 'Error al obtener notificaciones' }) } }) /** * Función helper para agregar una notificación a la cola de un usuario * Esta función puede ser llamada desde otros endpoints del servidor */ export function queueNotification(userId: string, notification: any) { if (!notificationQueue.has(userId)) { notificationQueue.set(userId, []) } notificationQueue.get(userId)!.push(notification) }