-
Notifications
You must be signed in to change notification settings - Fork 0
00. SISTEMA DE NOTIFICACIONES
Se implementará un sistema de notificaciones en tiempo real para aquellas clasificadas como importantes, además de una bandeja de entrada donde se podrán consultar tanto las notificaciones importantes como las regulares.
Utilizaremos Socket.io junto con JWT para verificar si un usuario está en línea (tiene una sesión activa). Si un usuario está en línea, recibirá alertas emergentes (pop-ups) con la información siguiente:
- Dueño de una subasta: Si la subasta ha finalizado, se notificará al usuario sobre el monto de la puja ganadora, si la hay, o se le informará que la subasta no ha recibido pujas por encima del precio base.
- Dueño de una subasta cancelada: Si una subasta es cancelada por el administrador, se le notificará al dueño la cancelación y el motivo de la misma.
- Usuario ganador: Se le notificará al usuario que ha ganado la puja.
Las notificaciones se enviarán a la bandeja de entrada en los siguientes casos:
-
Participantes en una subasta:
- A aquellos que no resultaron ganadores.
- A quienes participaron en una subasta que fue cancelada.
- Notificaciones importantes no entregadas en tiempo real: Aquellas que no se entregaron debido a que el usuario no estaba conectado.
- Notificaciones del sistema: Por ejemplo, la disponibilidad de un nuevo sobre en la tienda, nueva carta disponible, etc.
En la bandeja de entrada, las notificaciones se almacenan como un historial. El usuario puede marcarlas como leídas. Por el momento, no se implementará funcionalidad para borrar notificaciones.
{
"_id": ObjectId("5f3a2c1b"),
"usuarioId": ObjectId("5f2b1a2c"),
"username": String,
"tipo": NotificationType,
"mensaje": "¡Felicidades! Has ganado la subasta del artículo XYZ.",
"leída": false,
"fechaCreación": ISODate("2023-06-08T12:00:00Z"),
"fechaLectura": ISODate("2023-06-08T12:00:00Z"),
"importancia": "alta",
"tiempoReal": true
}
// NOTIFICATION
// Notification type
export enum NotificationType {
BidWinner = "bidwinner",
AuctionCancelled = "auctioncancelled",
CardSold = "auctioncardsold",
CardNotSold = "auctioncardnotsold",
CardGifted = "cardgifted",
System = "system"
}
Tener un "tipo" de notificación permite, en un futuro, implementar un filtrado de notificaciones.
Las siguientes rutas están definidas en el notificationRouter
, cada una con sus respectivos parámetros de validación y controladores asociados.
-
GET /:username
- Obtiene todas las notificaciones para un usuario específico.
- Parámetros:
username
(obligatorio, debe ser un string).
-
PATCH /notification/:notificationId/read
- Marca una notificación específica como leída.
- Parámetros:
notificationId
(requerido).
-
PATCH /notifications/read
- Marca todas las notificaciones de un usuario como leídas.
-
DELETE /notification/delete/:notificationId
- Elimina una notificación específica.
- Parámetros:
notificationId
(obligatorio).
-
DELETE /notifications/delete-all/:username
- Elimina todas las notificaciones de un usuario específico.
- Parámetros:
username
(obligatorio).
-
GET /notifications/unread/:username
- Verifica si un usuario tiene notificaciones no leídas.
- Parámetros:
username
(obligatorio).
-
POST /notifications/create
- Crea una nueva notificación.
- Parámetros:
username
,type
,message
,importance
,realTime
(todos obligatorios).
Cada ruta implementa validaciones específicas para asegurar la integridad de los datos recibidos y manejar adecuadamente los errores de validación.