Una API RESTful robusta y ligera para la gestión eficiente de tareas, construida con Java y Spring Boot.
- Descripción Detallada
- Interfaz Gráfica Web
- Tecnologías Utilizadas
- Requisitos Previos
- Instalación y Configuración
- Base de Datos
- Documentación de la API
- Guía de Pruebas
- Variables de Entorno
- Solución de Problemas
- Contribución
- Licencia y Autores
Task Management API es una solución backend diseñada para demostrar las mejores prácticas en el desarrollo de servicios REST con el ecosistema Spring. El proyecto implementa una arquitectura en capas limpia y escalable, permitiendo realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre entidades de tareas.
El proyecto sigue el patrón de diseño Controller-Service-Repository:
- Controller Layer (
com.task.controller): Maneja las solicitudes HTTP y respuestas REST. - Service Layer (
com.task.service): Encapsula la lógica de negocio y validaciones. - Repository Layer (
com.task.repository): Abstracción de acceso a datos utilizando Spring Data JPA. - Model Layer (
com.task.model): Entidades JPA que representan la estructura de datos.
Además de la API REST, el proyecto incluye una interfaz web moderna y responsive llamada TaskFlow que permite gestionar tareas de forma visual e intuitiva.
Una vez iniciada la aplicación, accede a la interfaz web en:
http://localhost:8080
El tablero principal muestra estadísticas en tiempo real:
- Total de Tareas: Contador de todas las tareas creadas
- Tareas Completadas: Número de tareas finalizadas
- Tareas Pendientes: Tareas por completar
Interfaz modal para agregar tareas con:
- Título: Nombre descriptivo de la tarea
- Descripción: Detalles adicionales
- Prioridad: Niveles de prioridad (LOW, MEDIUM, HIGH)
- Estado: Pendiente o Completada
Las tareas se muestran como tarjetas interactivas con:
- Indicador visual de estado (círculo toggle)
- Etiqueta de prioridad con código de colores
- Menú de opciones (editar/eliminar)
- Descripción completa
Toggle rápido para marcar tareas como completadas/pendientes con actualización visual inmediata.
Modal de edición que permite modificar todos los campos de una tarea existente.
Función de eliminación rápida desde el menú de opciones de cada tarea.
- Frontend: HTML5, CSS3, JavaScript (Vanilla)
- Motor de Plantillas: Thymeleaf
- Diseño: Responsive con sidebar navigation
- Estilo: Sistema de diseño moderno con paleta de colores profesional
- Interactividad: Modales, toasts de notificación, animaciones suaves
- Lenguaje: Java 21 - Última versión LTS con características modernas.
- Framework: Spring Boot - Para configuración rápida y convención sobre configuración.
- Base de Datos: H2 Database - Base de datos SQL en memoria de alto rendimiento.
- ORM: Hibernate / Spring Data JPA - Para persistencia de datos.
- Herramientas de Desarrollo:
Asegúrate de tener instalado lo siguiente antes de comenzar:
- Java Development Kit (JDK): Versión 21 o superior.
- Verificar versión:
java -version
- Verificar versión:
- Maven: Versión 3.8+ (opcional si usas el wrapper incluido
mvnw). - Git: Para clonar el repositorio.
- Cliente API (Opcional): Postman, Insomnia o cURL para pruebas manuales.
Sigue estos pasos para ejecutar el proyecto en tu entorno local:
-
Clonar el repositorio
git clone https://github.com/tu-usuario/task-project.git cd task-project -
Compilar y construir el proyecto Usa el wrapper de Maven para asegurar compatibilidad:
./mvnw clean install
(En Windows usa
mvnw.cmd clean install) -
Ejecutar la aplicación
./mvnw spring-boot:run
La aplicación iniciará por defecto en el puerto 8080.
El proyecto utiliza H2 Database en modo memoria (mem), lo que significa que no necesitas instalar ningún servidor de base de datos externo. Los datos se reinician cada vez que se detiene la aplicación.
Spring Boot expone una consola web para inspeccionar la base de datos:
- Inicia la aplicación.
- Abre tu navegador en:
http://localhost:8080/h2-console - Ingresa los siguientes datos de conexión (definidos en
application.properties):- Driver Class:
org.h2.Driver - JDBC URL:
jdbc:h2:mem:testdb - User Name:
sa - Password: (dejar vacío)
- Driver Class:
- El esquema se genera automáticamente gracias a
spring.jpa.hibernate.ddl-auto=update. - Puedes poblar datos iniciales creando un archivo
src/main/resources/data.sql(opcional).
La API base URL es: http://localhost:8080/api/tasks
- Método:
GET - Ruta:
/api/tasks - Respuesta Exitosa (200 OK):
[ { "id": 1, "title": "Aprender Spring Boot", "description": "Estudiar JPA y controladores REST", "completed": false } ]
- Método:
GET - Ruta:
/api/tasks/{id} - Ejemplo:
/api/tasks/1 - Respuesta Exitosa (200 OK): Objeto Task.
- Error (404 Not Found): Si el ID no existe.
- Método:
POST - Ruta:
/api/tasks - Headers:
Content-Type: application/json - Cuerpo de la Petición:
{ "title": "Configurar CI/CD", "description": "Crear pipeline en GitHub Actions", "completed": false } - Validaciones: El campo
titlees obligatorio.
- Método:
PUT - Ruta:
/api/tasks/{id} - Cuerpo de la Petición:
{ "title": "Configurar CI/CD Actualizado", "description": "Pipeline completado", "completed": true }
- Método:
DELETE - Ruta:
/api/tasks/{id} - Respuesta Exitosa (204 No Content).
El proyecto incluye pruebas automatizadas con JUnit 5 y Spring Boot Test.
Para ejecutar todas las pruebas:
./mvnw testEjemplo para crear una tarea desde la terminal:
curl -X POST http://localhost:8080/api/tasks \
-H "Content-Type: application/json" \
-d '{"title":"Test Task", "description":"Probando API", "completed":false}'Las configuraciones principales se encuentran en src/main/resources/application.properties. Puedes sobreescribirlas mediante variables de entorno del sistema o argumentos de línea de comandos.
| Variable | Propiedad Spring | Descripción | Valor por Defecto |
|---|---|---|---|
SERVER_PORT |
server.port |
Puerto del servidor | 8080 |
SPRING_DATASOURCE_URL |
spring.datasource.url |
URL de conexión JDBC | jdbc:h2:mem:testdb |
SPRING_DATASOURCE_USERNAME |
spring.datasource.username |
Usuario BD | sa |
1. Error: "Address already in use"
- Causa: El puerto 8080 está ocupado por otra aplicación.
- Solución: Detén el proceso que usa el puerto o cambia el puerto de la aplicación:
./mvnw spring-boot:run -Dspring-boot.run.arguments=--server.port=8081
2. Error: "Java version mismatch"
- Causa: Estás intentando ejecutar con una versión de Java inferior a 21.
- Solución: Instala JDK 21 y configura tu variable
JAVA_HOME.
¡Las contribuciones son bienvenidas! Por favor sigue estos pasos:
- Haz un Fork del proyecto.
- Crea una rama para tu característica (
git checkout -b feature/NuevaCaracteristica). - Commit de tus cambios (
git commit -m 'Add: Nueva funcionalidad X'). - Push a la rama (
git push origin feature/NuevaCaracteristica). - Abre un Pull Request.
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
- Leo Morales - Desarrollador Principal
- v0.0.1 - Lanzamiento inicial con funcionalidades CRUD básicas.





