Skip to content

00. SISTEMA DE NOTIFICACIONES

Paula Suárez edited this page Jun 10, 2024 · 6 revisions

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.

Notificaciones en Tiempo Real

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.

Bandeja de Entrada

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.

Primera versión del esquema de datos

{
  "_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.

Resumen de Rutas de Notificaciones

Rutas de Notificaciones

Las siguientes rutas están definidas en el notificationRouter, cada una con sus respectivos parámetros de validación y controladores asociados.

Obtener Notificaciones

  • GET /:username
    • Obtiene todas las notificaciones para un usuario específico.
    • Parámetros: username (obligatorio, debe ser un string).

Marcar Notificación como Leída

  • PATCH /notification/:notificationId/read
    • Marca una notificación específica como leída.
    • Parámetros: notificationId (requerido).

Marcar Todas las Notificaciones como Leídas

  • PATCH /notifications/read
    • Marca todas las notificaciones de un usuario como leídas.

Eliminar una Notificación Específica

  • DELETE /notification/delete/:notificationId
    • Elimina una notificación específica.
    • Parámetros: notificationId (obligatorio).

Eliminar Todas las Notificaciones

  • DELETE /notifications/delete-all/:username
    • Elimina todas las notificaciones de un usuario específico.
    • Parámetros: username (obligatorio).

Verificar Notificaciones No Leídas

  • GET /notifications/unread/:username
    • Verifica si un usuario tiene notificaciones no leídas.
    • Parámetros: username (obligatorio).

Crear una Notificación

  • 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.