Controlador: app/Http/Controllers/Api/NotificationController.php (724 líneas)
/api/notifications (protegida)Todas las notificaciones del usuario, paginadas (20 por página).
Response:
{
"success": true,
"data": {
"current_page": 1,
"data": [
{
"id": 150,
"user_id": 1,
"from_user_id": 5,
"type": "like",
"post_id": 42,
"data": { "liker_username": "marialop", ... },
"read_at": null,
"created_at": "2025-06-20T...",
"from_user_data": {
"id": 5,
"name": "María López",
"username": "marialop",
"imagen": "uuid.jpg",
"insignia": null,
"imagen_url": "https://dominio.com/perfiles/uuid.jpg"
},
"post_data": {
"id": 42,
"titulo": "Mi post",
"tipo": "imagen",
"imagen": "post.webp",
"imagen_url": "https://dominio.com/uploads/post.webp"
},
"message": "María López le dio like a tu publicación",
"time_ago": "hace 5 minutos"
}
]
}
}
Transformación: Cada notificación se enriquece con:
from_user_data: Datos del usuario que generó la acción (con imagen_url completa)post_data: Datos del post relacionado (con imagen_url completa)message: Texto descriptivo generado por $notification->getMessage()time_ago: Tiempo relativo (hace 5 minutos, hace 2 horas)Las relaciones originales (fromUser, post, user) se ocultan del JSON final con unset().
/api/notifications/unread (protegida)Solo notificaciones no leídas (sin paginación, devuelve todas). Misma transformación.
Response adicional: count con el total de no leídas.
/api/notifications/count (protegida)Endpoint ligero para obtener solo el conteo de no leídas (para badges).
Response:
{
"success": true,
"count": 7
}