API REST para gestión de tareas desarrollada con Spring Boot, PostgreSQL y Docker.
TaskFlow es una aplicación backend que permite gestionar tareas y usuarios con sus relaciones. Incluye operaciones CRUD completas, validaciones, documentación con Swagger y está dockerizada para facilitar el despliegue.
- Java 17
- Spring Boot 3.3.5
- Spring Data JPA
- PostgreSQL 15
- Docker & Docker Compose
- Maven
- Swagger/OpenAPI 3
- Bean Validation
- Java 17+
- Docker Desktop
- Maven (opcional, incluido en el proyecto)
- Clonar el repositorio:
git clone https://github.com/tu-usuario/taskflow.git
cd taskflow
- Levantar los servicios:
docker-compose up -d
Esto iniciará:
- PostgreSQL en
localhost:5432
- TaskFlow API en
localhost:8080
- Verificar que funciona:
curl http://localhost:8080/actuator/health
- Levantar solo PostgreSQL:
docker-compose up postgres -d
- Ejecutar la aplicación desde IntelliJ:
- Abrir el proyecto en IntelliJ IDEA
- Run
TaskflowApplication
Una vez iniciada la aplicación, accede a:
http://localhost:8080/swagger-ui.html
Aquí podrás:
- Ver todos los endpoints disponibles
- Probar la API directamente desde el navegador
- Ver ejemplos de request/response
Método | Endpoint | Descripción |
---|---|---|
GET | /api/tasks |
Obtener todas las tareas |
GET | /api/tasks/{id} |
Obtener tarea por ID |
POST | /api/tasks |
Crear nueva tarea |
PUT | /api/tasks/{id} |
Actualizar tarea |
DELETE | /api/tasks/{id} |
Eliminar tarea |
Método | Endpoint | Descripción |
---|---|---|
GET | /api/users |
Obtener todos los usuarios |
GET | /api/users/{id} |
Obtener usuario por ID |
POST | /api/users |
Crear nuevo usuario |
PUT | /api/users/{id} |
Actualizar usuario |
DELETE | /api/users/{id} |
Eliminar usuario |
curl -X POST http://localhost:8080/api/tasks \
-H "Content-Type: application/json" \
-d '{
"title": "Completar proyecto",
"description": "Finalizar el backend de TaskFlow",
"status": "IN_PROGRESS",
"userId": 1
}'
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{
"name": "Juan Pérez",
"email": "juan@example.com"
}'
taskflow/
├── src/
│ ├── main/
│ │ ├── java/com/ausanchez/taskflow/
│ │ │ ├── controller/ # Controladores REST
│ │ │ ├── dto/ # Data Transfer Objects
│ │ │ ├── exception/ # Manejo de excepciones
│ │ │ ├── model/ # Entidades JPA
│ │ │ ├── repository/ # Repositorios
│ │ │ ├── service/ # Lógica de negocio
│ │ │ └── TaskflowApplication.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application-dev.properties
│ │ └── application-prod.properties
│ └── test/ # Tests unitarios e integración
├── docker-compose.yml # Orquestación de contenedores
├── Dockerfile # Imagen de la aplicación
├── pom.xml # Dependencias Maven
└── README.md
El proyecto tiene dos perfiles:
Development (H2 en memoria):
spring.profiles.active=dev
Production (PostgreSQL):
spring.profiles.active=prod
Configuradas en docker-compose.yml
:
POSTGRES_DB: taskflowdb
POSTGRES_USER: taskflow_user
POSTGRES_PASSWORD: taskflow_pass
# Iniciar servicios
docker-compose up -d
# Ver logs
docker-compose logs -f app
# Parar servicios
docker-compose down
# Rebuild de la imagen
docker build -t taskflow-api:latest .
# Ver contenedores activos
docker ps
La API incluye validaciones automáticas:
- Title: No puede estar vacío, máximo 100 caracteres
- Email: Debe ser formato válido
- Status: Solo valores: PENDING, IN_PROGRESS, COMPLETED
# Ejecutar todos los tests
mvn test
# Ejecutar tests con cobertura
mvn test jacoco:report
- Tests unitarios con JUnit y Mockito
- Tests de integración
- GitHub Actions (CI/CD)
- Autenticación JWT
- Paginación de resultados
- Filtros y búsqueda avanzada
Rubén Fernández Molina
- GitHub: @RubenFM
- LinkedIn: Rubén Fernández Molina
- Email: : rubenfernandezmolina13@gmail.com