El servicio de catálogo es el componente responsable de gestionar el catálogo de contenido de la plataforma. Sus responsabilidades principales son:

Vista General

En el siguiente diagrama se puede observar a grandes rasgos la arquitectura del servicio de catálogo:

Arquitectura del Catalog Service

Link al diagrama para mayor claridad: Arquitectura del Catalog Service

Se puede observar cómo el servicio de catálogo se comunica con el User Service para obtener información de los usuarios en algunos casos, como en el Collection Service, mediante HTTP requests. También utiliza webhooks para enviar notificaciones de eventos como la creación de una playlist o una nueva publicación de un artista.

Los servicios principales que tienen subservicios son:

Nota importante: El servicio de métricas funciona como un servicio independiente dentro del servicio de catálogo, con su propia arquitectura y responsabilidades. Utiliza una arquitectura de dos niveles (eventos individuales y agregaciones diarias) para optimizar el rendimiento y proporciona APIs completas para consultar métricas de canciones, colecciones, playlists y artistas. Para más detalles sobre su arquitectura, flujo de captura, y APIs disponibles, ver Métricas.

Bases de Datos

El servicio de catálogo utiliza dos bases de datos diferentes, cada una optimizada para su caso de uso específico:

  • PostgreSQL: Base de datos principal del servicio de catálogo - almacena toda la información estructurada y relacional (colecciones, canciones, playlists, likes, guardados)
  • MongoDB: Base de datos de métricas - almacena eventos de reproducción y métricas agregadas

Para más detalles sobre el diseño y las razones de esta elección, ver la sección de Bases de Datos en Overview.

Tecnologías Utilizadas

  • Java: Lenguaje de programación principal para el servicio de catálogo.
  • Spring Boot: Framework para el desarrollo de aplicaciones Java. Utilizado para la creación de la API REST y el manejo de la autenticación y autorización.
  • PostgreSQL: Base de datos relacional para el servicio de catálogo.
  • MongoDB: Base de datos NoSQL para las métricas del servicio de catálogo.
  • JPA y Hibernate: ORM para la persistencia de datos en PostgreSQL.
  • Spring Data MongoDB: ORM para la persistencia de datos en MongoDB.

Para ver la explicación de por que java y spring boot fueron las tecnologías elegidas, ver la sección de Lenguajes Utilizados en Overview.

Comunicación entre Servicios

Comunicación con User Service

El servicio de catálogo se comunica de forma unidireccional con el User Service mediante HTTP requests síncronas para obtener información adicional de usuarios cuando es necesario. Algunos casos de uso incluyen:

  • Obtener los géneros favoritos de un usuario para personalizar recomendaciones
  • Verificar información de seguidos/seguidores para mostrar contenido relevante
  • Obtener datos del perfil de usuario para mostrar en el contexto del catálogo

Esta comunicación es unidireccional porque el servicio de catálogo solo consume información del servicio de usuarios, pero no le envía datos.

Comunicación con Notification Service

El servicio de catálogo se comunica con el Notification Service mediante webhooks para enviar notificaciones de eventos importantes. Algunos eventos que se notifican incluyen:

  • Creación de una nueva playlist
  • Nueva publicación de un artista
  • Eventos relevantes que requieren notificar a los usuarios

Esta comunicación es asíncrona mediante webhooks, lo que permite que el servicio de catálogo continúe procesando sin esperar a que se procesen las notificaciones.