-
Instrucciones para ejecutar el proyecto
-
Requisitos
- Java 21 LTS
- Maven 3.9+
- IDE recomendado: IntelliJ IDEA Community (opcional)
- Opcional: navegador para Swagger UI
-
Pasos
-
Clonar el repositorio:
- git clone <URL_DEL_REPOSITORIO>
-
Compilar y ejecutar con Maven:
git clone <URL_DEL_REPOSITORIO> cd API-Rest-simple
- Acceder a la API:
- Base URL: http://localhost:8080/api/solicitudes - Swagger UI: http://localhost:8080/swagger-ui.html Permite probar todos los endpoints (crear, listar, modificar solicitudes).
-
-
-
Breve descripción de la arquitectura y decisiones técnicas
-
Arquitectura
Se utilizó la arquitectura en capas típica de Spring Boot:
- model
- DTO
- sevice
- controller/rest
- repository (en este caso no lo he usado puesto que he usado datos en memoria)
-
-
Decisiones técnicas
- Spring Boot 3.3 + Java 21 LTS para compatibilidad y soporte LTS.
- Maven para gestión de dependencias y compilación.
- Lombok para reducir código repetitivo (@Data, @Builder, etc.).
- Almacenamiento en memoria (Map<Long, Solicitud>) para simplificar el proyecto y evitar base de datos.
- Validación de flujo de estados en el Service:
- PENDIENTE → APROBADA / RECHAZADA
- APROBADA → CANCELADA
- Se lanza ResponseStatusException con HTTP 400 si la transición es inválida.
- Swagger (springdoc-openapi) para documentación y pruebas interactivas de la API.
- DTO (ModificarDTO, SolicitudDTO) para separar los datos de entrada de la entidad de dominio, mejorando claridad y escalabilidad.
- Mejoras o extensiones con más tiempo
-
Funcionales
- Persistencia real en base de datos (H2, PostgreSQL, MySQL) usando Spring Data JPA.
- Autenticación y autorización por roles (clientes / gestores) con Spring Security.
- Validaciones más completas en la creación de solicitudes (importe mínimo, formato de DNI/NIE).
- Implementar filtros de búsqueda por estado, divisa o rango de importe.
- Exportación de solicitudes a CSV / PDF.
-
Técnicas / Arquitecturales
- Separar claramente DTOs de respuestas y requests para la API.
- Implementar tests unitarios y de integración para servicios y controladores (JUnit + Mockito).
- Añadir capa de excepciones global (@ControllerAdvice) para estandarizar respuestas de error.
- Configuración de profiles de Spring para desarrollo, test y producción.
- Posible refactor a arquitectura hexagonal o limpia para proyectos más grandes.