Skip to content

GCrel/spring-boot-todo-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧾 To-Do API con Spring Boot

API REST para gestionar tareas (crear, listar, actualizar, eliminar).

🚀 Tecnologías

  • Java 17
  • Spring Boot
  • Spring Data JPA
  • PostgreSQL Database
  • Swagger (OpenAPI)

📦 Endpoints principales

  • POST /tasks: Crear una nueva tarea
  • GET /tasks: Obtener todas las tareas
  • GET /tasks/{id}: Obtener una tarea por ID
  • PUT /tasks/{id}: Actualizar tarea
  • DELETE /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:

Swagger UI

Configuración de la base de datos

  1. 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
  1. Accede al contenedor:
docker exec -it postgres-db psql -U gcrel
  1. Crea la base de datos:
CREATE DATABASE taskapp;

▶️ Cómo correr el proyecto

./mvnw clean install # Compila el proyecto y descarga dependencias
./mvnw spring-boot:run -pl adapter

🧱 Arquitectura limpia (Clean Architecture)

Este proyecto sigue los principios de Clean Architecture, separando claramente la lógica de negocio (Core) de los detalles de infraestructura (Web, DB, DTOs).

🧠 Core (Dominio + Casos de uso)

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.

🧰 Infrastructure (Adaptadores)

El módulo adapter implementa los detalles externos:

  • Repository: implementación concreta de IRepository usando Spring Data JPA.
  • API: controlador REST que implementa IUseCaseInput y 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.

📊 Diagrama de dependencias

Clean Architecture Diagram

🔄 Flujo general

  1. El controlador (API) recibe una petición HTTP.
  2. Convierte los datos a TaskDTO y llama al UseCase a través de IUseCaseInput.
  3. El UseCase ejecuta la lógica y accede al repositorio a través de IRepository.
  4. El repositorio (Repository) convierte entre TaskEntity y Task, y persiste los datos usando JPA.
  5. El UseCase devuelve el resultado al controlador, que lo convierte a JSON y lo envía como respuesta HTTP.

About

API REST para gestionar tareas (crear, listar, actualizar, eliminar).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages