Task Manager es una aplicación Full Stack diseñada para la gestión eficiente de tareas. Los usuarios pueden crear, actualizar, marcar como completadas o eliminar tareas. Además, la autenticación se maneja mediante JWT para garantizar la seguridad, y se cuenta con un sistema de roles para controlar el acceso a ciertas funciones. El backend está desarrollado en Spring Boot 3 y Java 17, mientras que el frontend está construido con React y estilizado con Tailwind CSS.
🚀 Deploy Frontend: https://taskmanager.alejoczombos.com.ar
🚀 Deploy Docs: https://taskmanager-back.alejoczombos.com.ar/docs
☝️ (El enlace lleva a la documentación interactiva de la API, donde puedes probar los endpoints y revisar la implementación de la seguridad JWT.)Demora un poco en cargar al principio por el hosting
Clona el repositorio desde TaskManager Repository.
Configura el archivo application.properties con los datos de tu base de datos PostgreSQL local:
(El archivo se encuentra en la ruta src/main/resorces/application.properties
)
```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/TU_BASE_DE_DATOS
spring.datasource.username=TU_USUARIO
spring.datasource.password=TU_CONTRASEÑA
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
```
Navega hasta la carpeta del backend con cd /Backend/
Ejecuta el backend usando mvn spring-boot:run
.
cd /Front/
npm install
.npm run dev
.erDiagram
USER ||--o{ TASK : has
USER {
user_id INT PK
username VARCHAR
firstname VARCHAR
lastname VARCHAR
password VARCHAR
role ENUM
}
TASK {
task_id INT PK
user_id INT PK, FK
title VARCHAR
description VARCHAR
finished BOOLEAN
important BOOLEAN
date DATE
}
id
: Long (ID de la tarea, autogenerado)title
: String (Título de la tarea)description
: String (Descripción de la tarea)finished
: Boolean (Estado de finalización de la tarea)important
: Boolean (Indicador de tarea importante)date
: Date (Fecha de la tarea)user_id
: Long (ID del usuario al que pertenece la tarea)id
: Long (ID del usuario, autogenerado)username
: String (Nombre de usuario único)firstname
: String (Nombre del usuario)lastname
: String (Apellido del usuario)password
: String (Contraseña del usuario, encriptada)role
: Role (Rol del usuario, ADMIN o USER)ADMIN
: Rol de administrador.USER
: Rol de usuario normal.La aplicación utiliza Spring Security para la gestión de la seguridad y JWT (JSON Web Tokens) para la autenticación.
Las rutas y recursos sensibles de la API están protegidos mediante Spring Security. Se utiliza un sistema de tokens JWT para la autenticación, lo que garantiza que solo los usuarios autenticados y autorizados puedan acceder a ciertos recursos y realizar ciertas acciones en la aplicación.
Método | Endpoint | Descripción | Enlace Rápido |
---|---|---|---|
GET | /api/tasks/{taskId} |
Obtiene una tarea por su ID. | Obtener Tarea por ID |
GET | /api/tasks |
Obtiene todas las tareas asociadas a un usuario por su ID. | Obtener Todas las Tareas por ID de Usuario |
GET | /api/tasks/finished |
Obtiene todas las tareas completadas asociadas a un usuario. | Obtener Todas las Tareas Completadas por ID de Usuario |
GET | /api/tasks/unfinished |
Obtiene todas las tareas pendientes asociadas a un usuario. | Obtener Todas las Tareas Pendientes por ID de Usuario |
GET | /api/tasks/important |
Obtiene todas las tareas importantes asociadas a un usuario. | Obtener Todas las Tareas Importantes por ID de Usuario |
POST | /api/tasks |
Crea una nueva tarea para un usuario. | Crear Nueva Tarea |
PUT | /api/tasks |
Actualiza una tarea existente para un usuario. | Actualizar Tarea Existente |
PUT | /api/tasks/{taskId} |
Actualiza el estado de una tarea a completada por su ID. | Cambia el Estado de una tarea por su ID |
DELETE | /api/tasks/{taskId} |
Elimina una tarea por su ID. | Eliminar Tarea por ID |
GET /api/tasks/{taskId}
taskId
: Long (ID de la tarea)200 OK
: Tarea obtenida exitosamente.404 Not Found
: Tarea no encontrada.GET /api/tasks
userId
: Long (ID de usuario)200 OK
: Lista de tareas obtenida exitosamente.404 Not Found
: Usuario no encontrado o sin tareas asociadas.GET /api/tasks/finished
userId
: Long (ID de usuario)200 OK
: Lista de tareas completadas obtenida exitosamente.404 Not Found
: Usuario no encontrado o sin tareas completadas asociadas.GET /api/tasks/unfinished
userId
: Long (ID de usuario)200 OK
: Lista de tareas pendientes obtenida exitosamente.404 Not Found
: Usuario no encontrado o sin tareas pendientes asociadas.GET /api/tasks/important
userId
: Long (ID de usuario)200 OK
: Lista de tareas importantes obtenida exitosamente.404 Not Found
: Usuario no encontrado o sin tareas importantes asociadas.Endpoint: POST /api/tasks
Descripción: Crea una nueva tarea para un usuario.
Parámetros:
task
: Task (Cuerpo de la solicitud con la información de la tarea)userId
: Long (ID de usuario)Respuesta:
201 Created
: Tarea creada exitosamente.400 Bad Request
: Error en la solicitud (Intento de creación con taskId).404 Not Found
: Usuario no encontrado.Request Body:
{
"title": "String",
"description": "String",
"finished": false,
"important": false,
"date": "YYYY-MM-DD"
}
Endpoint: PUT /api/tasks
Descripción: Actualiza una tarea existente para un usuario.
Parámetros:
task
: Task (Cuerpo de la solicitud con la información actualizada de la tarea)userId
: Long (ID de usuario)Respuesta:
200 OK
: Tarea actualizada exitosamente.404 Not Found
: Tarea o usuario no encontrados.Request Body:
{
"id": 1,
"title": "String",
"description": "String",
"finished": false,
"important": false,
"date": "YYYY-MM-DD"
}
PUT /api/tasks/{taskId}
taskId
: Long (ID de la tarea)200 OK
: Estado de la tarea actualizado a completada exitosamente.404 Not Found
: Tarea no encontrada.DELETE /api/tasks/{taskId}
taskId
: Long (ID de la tarea)204 No Content
: Tarea eliminada exitosamente.404 Not Found
: Tarea no encontrada.Método | Endpoint | Descripción | Enlace Rápido |
---|---|---|---|
POST | /api/auth/login |
Inicia sesión y devuelve un token JWT. | Iniciar Sesión (Login) |
POST | /api/auth/register |
Registra un nuevo usuario y devuelve un token JWT. | Registrar Nuevo Usuario |
Endpoint: POST /api/auth/login
Descripción: Inicia sesión y devuelve un token JWT.
Respuesta:
200 OK
: Inicio de sesión exitoso, devuelve un token JWT.401 Unauthorized
: Credenciales incorrectas.{
"username": "String",
"password": "String"
}
Endpoint: POST /api/auth/register
Descripción: Registra un nuevo usuario y devuelve un token JWT.
Parámetros:
request
: RegisterRequest (Cuerpo de la solicitud con los detalles del nuevo usuario)Respuesta:
200 OK
: Registro exitoso, devuelve un token JWT.400 Bad Request
: Error en la solicitud o usuario ya existente.Request Body:
{
"username": "String",
"password": "String",
"firstname": "String",
"lastname": "String"
}