Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Gabo-gutierrez/Cinefinder/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Cinefinder API is built using Spring Boot and follows a clean, layered architecture based on the Controller-Service-Repository pattern. This design ensures separation of concerns, maintainability, and scalability.Architectural Layers
1. Controller Layer
The controller layer handles HTTP requests and responses. Controllers are responsible for:- Receiving client requests
- Validating input
- Delegating business logic to services
- Returning appropriate HTTP responses
PeliculasController- src/main/java/com/trainee/Cinefinder/controller/PeliculasController.java:19ObrasController- src/main/java/com/trainee/Cinefinder/controller/ObrasController.javaEventosUrbanosController- src/main/java/com/trainee/Cinefinder/controller/EventosUrbanosController.javaArtistasController- src/main/java/com/trainee/Cinefinder/controller/ArtistasController.javaCategoriasController- src/main/java/com/trainee/Cinefinder/controller/CategoriasController.javaParticipacionesController- src/main/java/com/trainee/Cinefinder/controller/ParticipacionesController.java
2. Service Layer
The service layer contains business logic and orchestrates operations between controllers and repositories. Interface Pattern: All services implement a baseCrudServices interface:
PeliculasServicesImpl- src/main/java/com/trainee/Cinefinder/service/impl/PeliculasServicesImpl.java:22ObrasServicesImpl- src/main/java/com/trainee/Cinefinder/service/impl/ObrasServicesImpl.javaEventosUrbanosServicesImpl- src/main/java/com/trainee/Cinefinder/service/impl/EventosUrbanosServicesImpl.javaArtistasServicesImpl- src/main/java/com/trainee/Cinefinder/service/impl/ArtistasServicesImpl.javaCategoriasServicesImpl- src/main/java/com/trainee/Cinefinder/service/impl/CategoriasServicesImpl.javaParticipacionesServicesImpl- src/main/java/com/trainee/Cinefinder/service/impl/ParticipacionesServicesImpl.java
3. Repository Layer
The repository layer provides data access using Spring Data JPA. Repositories extendJpaRepository to inherit common CRUD operations.
Example: PeliculaRepository
PeliculaRepository- src/main/java/com/trainee/Cinefinder/repository/PeliculaRepository.java:11ObraRepository- src/main/java/com/trainee/Cinefinder/repository/ObraRepository.javaEventoUrbanoRepository- src/main/java/com/trainee/Cinefinder/repository/EventoUrbanoRepository.javaArtistaRepository- src/main/java/com/trainee/Cinefinder/repository/ArtistaRepository.javaCategoriaRepository- src/main/java/com/trainee/Cinefinder/repository/CategoriaRepository.javaParticipacionRepository- src/main/java/com/trainee/Cinefinder/repository/ParticipacionRepository.java
Data Transfer Objects (DTOs)
DTOs are used to transfer data between layers and provide a clean API contract. Example: PeliculasDtoPeliculasDto- src/main/java/com/trainee/Cinefinder/model/dto/PeliculasDto.java:3ObrasDto- src/main/java/com/trainee/Cinefinder/model/dto/ObrasDto.javaEventosUrbanosDto- src/main/java/com/trainee/Cinefinder/model/dto/EventosUrbanosDto.javaArtistasDto- src/main/java/com/trainee/Cinefinder/model/dto/ArtistasDto.javaCategoriasDto- src/main/java/com/trainee/Cinefinder/model/dto/CategoriasDto.javaParticipacionesDto- src/main/java/com/trainee/Cinefinder/model/dto/ParticipacionesDto.javaErrorResponse- src/main/java/com/trainee/Cinefinder/model/dto/ErrorResponse.java:14SuccessResponse- src/main/java/com/trainee/Cinefinder/model/dto/SuccessResponse.java
Entity Models
Entity models represent database tables using JPA annotations. Example: Peliculas EntityPeliculas- src/main/java/com/trainee/Cinefinder/model/Peliculas.java:13Obras- src/main/java/com/trainee/Cinefinder/model/Obras.java:13EventosUrbanos- src/main/java/com/trainee/Cinefinder/model/EventosUrbanos.java:15Artistas- src/main/java/com/trainee/Cinefinder/model/Artistas.java:19Categorias- src/main/java/com/trainee/Cinefinder/model/Categorias.java:12Participaciones- src/main/java/com/trainee/Cinefinder/model/Participaciones.java:16
Mappers
Mappers convert between entities and DTOs. Example: PeliculasMapperPeliculasMapper- src/main/java/com/trainee/Cinefinder/mapper/PeliculasMapper.java:9ObrasMapper- src/main/java/com/trainee/Cinefinder/mapper/ObrasMapper.javaEventosUrbanosMapper- src/main/java/com/trainee/Cinefinder/mapper/EventosUrbanosMapper.javaArtistasMapper- src/main/java/com/trainee/Cinefinder/mapper/ArtistasMapper.javaCategoriasMapper- src/main/java/com/trainee/Cinefinder/mapper/CategoriasMapper.javaParticipacionesMapper- src/main/java/com/trainee/Cinefinder/mapper/ParticipacionesMapper.java
Exception Handling
Cinefinder uses a centralized exception handling mechanism with@RestControllerAdvice.
Exception Hierarchy
Base Exceptions:ExcepcionDeNegocio- Base exception for business logic errorsRecursoNoEncontradoException- Thrown when a resource is not found (404)ValidacionException- Thrown for validation errors
PeliculaTituloYaExistenteExceptionPeliculaNoActualizadaExceptionPeliculaNoEliminadaException
ObraTituloYaExistenteExceptionObraNoActualizadaExceptionObraNoEliminadaException
EventoUrbanoTituloYaExistenteExceptionEventoUrbanoNoActualizadaExceptionEventoUrbanoNoEliminadaException
ArtistaYaRegistradoExceptionArtistaNoActualizadoExceptionArtistaNoEliminadoException
CategoriaNombreYaExistenteExceptionCategoriaNoActualizadaExceptionCategoriaNoEliminadaException
ParticipacionYaRegistradoExceptionParticipacionNoActualizadaExceptionParticipacionNoEliminadaException
Global Exception Handler
TheGlobalExceptionHandler class intercepts exceptions and returns standardized error responses.
Application Entry Point
The main Spring Boot application class:Design Patterns
1. Dependency Injection
Using Spring’s@RequiredArgsConstructor and constructor injection for loose coupling.
2. Repository Pattern
Abstracting data access logic through Spring Data JPA repositories.3. DTO Pattern
Separating internal entity models from API contracts.4. Mapper Pattern
Converting between entities and DTOs using dedicated mapper classes.5. Service Layer Pattern
Encapsulating business logic in service classes.6. Exception Handler Pattern
Centralized exception handling with@RestControllerAdvice.
Key Benefits
Maintainability
Clear separation of concerns makes the codebase easy to understand and modify.
Testability
Each layer can be tested independently with mocks.
Scalability
New features can be added without affecting existing code.
Consistency
Standard patterns ensure uniform code across all endpoints.
Next Steps
Database Schema
Learn about the database structure and relationships