APOLO es una aplicación backend desarrollada con NestJS que proporciona una API RESTful para una plataforma de música social. El sistema permite a los usuarios descubrir música, crear reseñas, gestionar listas de reproducción, y socializar alrededor del contenido musical.
- Framework: NestJS (Node.js)
- Base de Datos: MySQL con Prisma ORM
- Autenticación: JWT + OAuth (Google, Spotify, Apple)
- Almacenamiento de archivos: Cloudinary
- Validación: class-validator + class-transformer
- APIs Externas: Spotify, MusicBrainz, Genius, OpenAI
src/
├── main.ts # Punto de entrada de la aplicación
├── app.module.ts # Módulo raíz que importa todos los módulos
├── auth/ # Autenticación y autorización
├── users/ # Gestión de usuarios
├── prisma/ # Configuración de Prisma ORM
├── activity/ # Sistema de actividad de usuarios
├── articles/ # Gestión de artículos/noticias
├── cloudinary/ # Integración con Cloudinary
├── comments/ # Sistema de comentarios
├── email/ # Servicio de correo electrónico
├── favorites/ # Gestión de favoritos
├── genius/ # Integración con Genius API
├── geo/ # Servicios geográficos
├── item/ # Entidades musicales (álbumes, canciones, artistas)
├── lists/ # Listas de reproducción personalizadas
├── musicbrainz/ # Integración con MusicBrainz API
├── notifications/ # Sistema de notificaciones
├── reviews/ # Sistema de reseñas y calificaciones
├── songstats/ # Estadísticas de canciones
├── spotify/ # Integración con Spotify API
└── common/ # Utilidades compartidas
- Propósito: Gestiona el registro, login y autenticación de usuarios
- Características:
- Autenticación JWT
- OAuth con Google, Spotify y Apple
- Reset de contraseñas por email
- Guards para proteger rutas
- Decoradores personalizados para roles
- Propósito: CRUD de usuarios y gestión de perfiles
- Características:
- Perfiles de usuario completos
- Configuraciones de privacidad
- Información social (género, biografía, enlaces)
- Geolocalización
- Propósito: Gestión de entidades musicales
- Características:
- Álbumes, canciones y artistas
- Resolución de metadatos musicales
- Integración con APIs externas
- Propósito: Sistema de calificaciones y reseñas
- Características:
- Calificaciones numéricas
- Reseñas textuales
- Estadísticas agregadas
- Propósito: Listas de reproducción personalizadas
- Características:
- Creación y gestión de listas
- Compartir listas públicas/privadas
- Colaboración en listas
- Propósito: Sistema de marcado como favorito
- Características:
- Favoritos de canciones, álbumes y artistas
- Gestión de favoritos por usuario
- Propósito: Gestión de artículos y noticias musicales
- Características:
- Publicación de artículos por usuarios autorizados
- Sistema de etiquetas (tags)
- Comentarios en artículos
- Contador de visualizaciones
- Gestión de imágenes asociadas
- Spotify (
spotify/
): Búsqueda de música, metadatos, autenticación OAuth - MusicBrainz (
musicbrainz/
): Base de datos abierta de música - Genius (
genius/
): Letras de canciones y información adicional - Cloudinary (
cloudinary/
): Almacenamiento y procesamiento de imágenes
User (usuarios)
├── Articles (artículos/noticias)
├── Reviews (reseñas)
├── Lists (listas de reproducción)
├── Favorites (favoritos)
├── Comments (comentarios)
├── Activity (actividad)
└── Notifications (notificaciones)
Item (entidades musicales)
├── Album
├── Song
├── Artist
└── Genre
- ORM: Prisma
- Motor: MySQL
- Migraciones: Gestionadas con Prisma Migrate
- Generación de tipos: Automática con Prisma Client
- JWT Tokens: Para autenticación stateless
- OAuth 2.0: Integración con proveedores externos
- Password Hashing: bcryptjs para hash seguro de contraseñas
- Guards: Protección de rutas sensibles
- Roles: Sistema de roles y permisos
- Decoradores:
@CurrentUser()
,@Roles()
para facilitar el control de acceso
- DTOs: Data Transfer Objects con validación automática
- Pipes: Validación global con
ValidationPipe
- Sanitización: Limpieza de datos de entrada
/auth/*
- Autenticación y registro/users/*
- Gestión de usuarios/items/*
- Entidades musicales/reviews/*
- Reseñas y calificaciones/lists/*
- Listas de reproducción/favorites/*
- Favoritos/articles/*
- Artículos y noticias/comments/*
- Comentarios/notifications/*
- Notificaciones
- Habilitado para todos los orígenes
- Soporte para credenciales
- Configurado para desarrollo y producción
- Cada funcionalidad está encapsulada en su propio módulo
- Separación clara de responsabilidades
- Reutilización de código mediante servicios compartidos
- Inyección de dependencias nativa de NestJS
- Servicios singleton para optimización
- Fácil testing mediante mocking
- Data Transfer Objects para validación de entrada
- Transformación automática de datos
- Documentación implícita de la API
- Escalabilidad: Arquitectura modular preparada para crecimiento
- Mantenibilidad: Código bien estructurado y documentado
- Rendimiento: Optimizaciones de consultas y caché
- Flexibilidad: APIs bien diseñadas y extensibles
- Observabilidad: Logging y manejo de errores robusto
- Cliente realiza petición HTTP
- Guards validan autenticación/autorización
- Controllers reciben y validan datos (DTOs)
- Services implementan lógica de negocio
- Prisma gestiona acceso a base de datos
- APIs externas proporcionan datos adicionales
- Response formateada y enviada al cliente
Esta arquitectura proporciona una base sólida, escalable y mantenible para el desarrollo de la plataforma APOLO.