LuigiPlay es una plataforma robusta desarrollada en Java y Spring Boot diseñada para la gestión y reproducción de contenido multimedia. El sistema está enfocado en ofrecer una arquitectura escalable, segura y optimizada para el streaming de datos.
Este proyecto integra tecnologías modernas como IA Generativa (LangChain4j) y documentación automática con OpenAPI.
- Gestión Multimedia: Catálogo organizado de contenidos.
- Arquitectura Limpia: Separación clara de capas (Controller, Service, Repository).
- Inteligencia Artificial: Integración con LLMs mediante LangChain4j.
- Documentación Viva: API documentada automáticamente con Swagger/OpenAPI.
- API RESTful: Endpoints optimizados para consumo desde clientes Web o Mobile.
El proyecto sigue una arquitectura en capas para garantizar la separación de responsabilidades:
src/main/java/com/platzi/platzi_play
├── 📦 domain # Reglas de negocio y modelos agnósticos
│ ├── 📂 dto # Objetos de transferencia de datos
│ ├── 📂 service # Lógica de negocio e interfaces de servicio
│ ├── 📂 repository # Interfaces de repositorio (puertos)
│ └── 📂 exception # Excepciones de dominio
├── 📦 persistence # Implementación de acceso a datos
│ ├── 📂 entity # Entidades JPA (Base de datos)
│ ├── 📂 crud # Interfaces Spring Data CRUD
│ ├── 📂 mapper # Mapeadores (MapStruct) Entity <-> Domain
│ └── 📜 *Repository # Implementaciones de repositorios
└── 📦 web # Capa de presentación (API REST)
├── 📂 controller # Endpoints de la API
└── 📂 exception # Manejo global de errores HTTP
El proyecto utiliza un stack moderno gestionado por Gradle:
- Framework Principal:
Spring Boot 4.0.0(Web, Data JPA, Validation). - Inteligencia Artificial:
LangChain4jpara integración con modelos de lenguaje (OpenAI). - Mapeo de Objetos:
MapStructpara la conversión eficiente entre Entidades y DTOs. - Documentación:
SpringDoc OpenAPI(Swagger UI). - Base de Datos:
PostgreSQL Driver.
Para garantizar la mantenibilidad y escalabilidad, se han aplicado los siguientes patrones y principios:
-
Arquitectura Limpia (Clean Architecture):
- El dominio no depende de frameworks externos (o lo mínimo posible).
- La persistencia es un detalle de implementación, desacoplada mediante interfaces.
-
Patrón DTO (Data Transfer Object):
- No se exponen las Entidades de base de datos (@Entity) directamente en la API.
- Se usan DTOs para definir contratos claros de entrada y salida.
-
Manejo Centralizado de Errores:
- Uso de
@ControllerAdvicepara capturar excepciones y devolver respuestas JSON estandarizadas (RFC 7807 o formato personalizado).
- Uso de
-
Inyección de Dependencias:
- Preferencia por inyección vía constructor para garantizar inmutabilidad y facilitar el testing.
-
Principios SOLID:
- Diseño modular enfocado en la responsabilidad única y la inversión de dependencias.
El sistema garantiza su estabilidad mediante pruebas unitarias y de integración:
| Módulo | Responsabilidad | Estado |
|---|---|---|
| User Service | Gestión de perfiles y autenticación. | ✅ Operativo |
| Media Engine | Procesamiento y lógica de reproducción. | 🏗️ En Desarrollo |
| Catalog API | Gestión de metadatos de series y películas. | ✅ Operativo |
| AI Service | Recomendaciones y procesamiento con IA. | 🧪 Testing |
- JDK: 25.
- Base de Datos: PostgreSQL.
- Build Tool: Gradle.
- Docker: Opcional (para desarrollo con Docker Compose).
-
Clonar el repositorio:
git clone https://github.com/luiscacuango2/LuigiPlay.git cd LuigiPlay -
Configurar el entorno: Edita el archivo
src/main/resources/application.propertiescon tus credenciales de base de datos y API Keys necesarias (OpenAI, etc.). -
Compilar y Ejecutar:
./gradlew build ./gradlew bootRun
-
Acceder a la Documentación: Una vez levantado, visita:
http://localhost:8080/swagger-ui.html
¡Las contribuciones son bienvenidas! Por favor, lee nuestro archivo CONTRIBUTING.md para conocer los detalles sobre nuestro código de conducta y el proceso para enviarnos pull requests.
Este proyecto está bajo la Licencia MIT - mira el archivo LICENSE para más detalles.