Refactor: Centralización de asociación ITR-Carrera en ITR, caché, documentación Swagger y Testing (100%)
Cambios Principales
-
Patrón Aggregate Root:
- Eliminación completa de
ItrCarreraController,ItrCarreraService, y sus DTOs correspondientes. - El
ItrServiceahora se encarga de gestionar de forma transaccional las asociaciones con carreras al crear y modificar ITRs, utilizando listas de IDs (carrerasIds).
- Eliminación completa de
-
Optimización con Caché:
- Implementación de Spring Cache (
@Cacheable("itrs")) en el método de listado para reducir drásticamente las consultas a la base de datos PostgreSQL. - Inyección inteligente de
@CacheEvict(value = "itrs", allEntries = true)en los métodos mutadores (crear, actualizar, dar de baja, reactivar) para garantizar la coherencia de datos sin perder rendimiento.
- Implementación de Spring Cache (
-
Seguridad Dinámica y Capas:
- El
ItrControllerahora es puramente delegativo. - Toda la seguridad basada en roles (
@PreAuthorize("hasAuthority(...)")) fue trasladada estrictamente a nivel de método enItrService(VER_ITRS, CREAR_ITR, EDITAR_ITR, ELIMINAR_ITR, REACTIVAR_ITR).
- El
-
Reglas de Negocio:
- Implementación de un "candado de estado" en
actualizar()que devuelve409 Conflictsi se intenta modificar o asociar carreras a un ITR con estado lógicoINACTIVO. - Se corrigió la restricción del
ItrRequestDTOde 50 a 80 caracteres para sincronizar con la restricciónVARCHAR(80)yUNIQUEdel esquema de la base de datos SQL.
- Implementación de un "candado de estado" en
-
Documentación:
- Inyección masiva de etiquetas
@ApiResponsesen elItrControllerpara documentar explícitamente en Swagger los códigos de respuesta (200,201,204,400,404,409). - Creación del
ItrMappercon MapStruct para filtrar asociaciones activas.
- Inyección masiva de etiquetas
-
Testing:
- Se agregó la suite
ItrServiceTestutilizando JUnit 5 y Mockito. - 100% de cobertura sobre la lógica de negocio.
- Se agregó la suite