API REST para gestionar tareas (crear, listar, actualizar, eliminar).
- Java 17
- Spring Boot
- Spring Data JPA
- PostgreSQL Database
- Swagger (OpenAPI)
POST /tasks: Crear una nueva tareaGET /tasks: Obtener todas las tareasGET /tasks/{id}: Obtener una tarea por IDPUT /tasks/{id}: Actualizar tareaDELETE /tasks/{id}: Eliminar tarea
Puedes ver los endpoints y probarlos en la documentación Swagger en la url http://localhost:8080/swagger-ui/index.html:
- Ejecuta el contenedor de PostgreSQL con Docker:
docker run --name postgres-db -e POSTGRES_USER=gcrel -e POSTGRES_PASSWORD=Pruevas_JV -p 5432:5432 -d postgres- Accede al contenedor:
docker exec -it postgres-db psql -U gcrel- Crea la base de datos:
CREATE DATABASE taskapp;./mvnw clean install # Compila el proyecto y descarga dependencias
./mvnw spring-boot:run -pl adapterEste proyecto sigue los principios de Clean Architecture, separando claramente la lógica de negocio (Core) de los detalles de infraestructura (Web, DB, DTOs).
El módulo core contiene:
Task: entidad de dominio principal.UseCase: lógica de negocio para manipular tareas.IUseCaseInput: interfaz para definir los métodos del caso de uso.IRepository: interfaz para acceso a datos (abstracción sobre la base de datos).
El Core no depende de ninguna librería externa, solo define las reglas del negocio.
El módulo adapter implementa los detalles externos:
Repository: implementación concreta deIRepositoryusando Spring Data JPA.API: controlador REST que implementaIUseCaseInputy expone los endpoints HTTP.TaskDTO: objeto de transferencia de datos entre la capa web y el dominio.TaskEntity: entidad JPA para persistencia.
Esta capa depende del core, pero el core no depende de esta capa, siguiendo el principio de inversión de dependencias.
- El controlador (
API) recibe una petición HTTP. - Convierte los datos a
TaskDTOy llama alUseCasea través deIUseCaseInput. - El
UseCaseejecuta la lógica y accede al repositorio a través deIRepository. - El repositorio (
Repository) convierte entreTaskEntityyTask, y persiste los datos usando JPA. - El
UseCasedevuelve el resultado al controlador, que lo convierte a JSON y lo envía como respuesta HTTP.

