Este servicio es dependiente de la API de adoptaunpeludo.com.
Servidor de WebSockets encargado de gestionar las notificaciones en tiempo real y el chat incluido en la Web, se conecta a un broker de mensajes RabbitMQ donde recibe mensajes desde el exhange 'notification-request' y que consumirá estos mensajes en las siguientes colas:
-
animal-changed-push-notification: -- Cola encargada de mandar notificaciones cuando un animal de los favoritos del usuario ha sufrido un cambio o ha sido borrado.
-
new-chat-push-notification: -- Cola encargada de mandar una notificacion a un usuario cuando se crea un nuevo chat del cual es integrante.
-
animal-changed-notification: -- Cola encargada de mandar una notificacion a todos los usuarios cuando un usuario crea/borra/actualiza un animal para actualizar la informacion de los animales en tiempo real.
-
user-changed-notification: -- Cola encargada de mandar una notificacion a todos los usuarios cuando un usuario crea/borra/actualiza su cuenta para acutalizar la información mostrada en la web en tiempo real.
A su vez el servidor mandará mensajes a dos exchanges:
-
email-request -- A la cola 'email-request' para solicitar el envio de un email cuando al intentar enviar una notificación a un usuario cuando éste se encuentra offline
-
error-notification -- A la cola 'error-logs' para que el servicio NOC se encargue de guardar y notificar a los administradores del error segun su 'level'
El servidor de websockets es el encargado de enviar notificaciones en tiempo real acerca de cambios que afecten a animales o usuarios y también de:
-
Login: Autentificar al usuario que hace la peticion al servidor de Websockets
-
Logout: Desconectar al usuario previamente autentificado del servidor de Websockets
-
Crear sala de chat: Crear una sala de chat privada cuando así lo solicite un usuario autentificado
-
Entrar a sala de chat: Entrar a una sala de chat previamente creada, marcar todos los mensajes del chat como leidos
-
Salir de sala de chat: Salir de una sala de chat donde se encontraba el usuario
-
Mensaje de chat: Enviar un mensaje a el otro usuario (si lo hubiera) dentro de la sala de chat, si el otro usuario no estuviera en la sala le llegaría una notificacion de 'new-chat-message' y el mensaje se marcaría como leido y si estuviera offline le llegaría un email con un link a la sala de chat donde se escribió el mensaje y el mensaje se marcaría como no leido
Consultar la documentación de la API para arrancar este servicio junto a todos los otros usando Docker.
- Clonar el repo, movernos al directorio e instalar las depencencias:
git clone https://github.com/Adoptaunpeludo/websocket-service
cd websocket-service
npm i
- Copiar o renombrar el archivo .env.template y configurar con datos propios
PORT=<puerto del servicio>
# Postrgresql DB
DATABASE_URL=postgresql:<url a la base de datos para desarrollo local>
DOCK_DATABASE_URL=<url a la base de datos en produccion lanzada con Docker>
# JWT
JWT_SEED=<seed para los tokens JWT>
# RabbitMQ
RABBITMQ_USER=<usuario de rabbitmq>
RABBITMQ_PASS=<password de rabbitmq>
DOCK_RABBITMQ_URL=amqp:<url de rabbitmq estando en el mismo docker-compose>
RABBITMQ_URL=<url para conectar a rabbitmq>
3-a. Arrancar la aplicación en modo desarrollo
npm run dev
3-b. Arrancar la aplicación en modo produccion
npm run build
npm run start:prod
NOTA: Para que este servicio funcione de forma autónoma necesita una base de datos postgresql con las tablas necesarias para que funcione la API y RabbitMQ configurados con los valores del archivo .env