- Se creo una aplicacion usando Django Rest Framework y Postgres dentro de un entorno dockerizado. En la aplicación se incluye el uso de logs y tests para todos los endpoints provistos.
- Para poder ejecutar la aplicación es necesaria una pc que tenga docker y docker compose instalados.
- clonar el repositorio:
$ git clone https://github.com/ddeve/invera.git-ejecutar docker compose:
$ docker compose up --buildesto creara y ejecutara los servicios configurados en los contenedores. En la consola se podra ver todo el log de ejecución de la base de datos y de la aplicación django Al iniciar django crea todas tablas en la base y ejecuta un script para crear usuarios por defecto
username: ddeve password: ddeve
username: invera password: invera
Luego ejecutara todos los tests definidos dentro de task_manager/tests.py. En la consola de ejecución de docker compose se podrán ver los resultados de la ejecución.
Esta API permite gestionar usuarios y tareas utilizando autenticación por token. Los endpoints se dividen en dos grupos: Autenticación y Tareas.
Todos los endpoints estarán disponibles en el servicio
http://localhost:8000Nota:
Para acceder a los endpoints de Tareas, es necesario incluir en las solicitudes el header:
Authorization: Token
-
URL:
/api/register/ -
Método:
POST -
Content-Type:
application/x-www-form-urlencodedoapplication/json(según configuración) -
Descripción: Registra un nuevo usuario en el sistema.
-
Payload de la solicitud:
{ "username": "nuevo_usuario", "password": "contraseña_segura" } -
Ejemplo de respuesta (código 201):
{ "id": 1, "username": "nuevo_usuario" }
-
URL:
/api/login/ -
Método:
POST -
Content-Type:
application/json -
Descripción: Autentica a un usuario existente y retorna un token de autenticación.
-
Payload de la solicitud:
{ "username": "usuario_existente", "password": "contraseña" } -
Ejemplo de respuesta (código 200):
{ "token": "abc123def456ghi789..." }
Importante: Todos los endpoints de tareas requieren autenticación. Se debe enviar el header:
Authorization: Token
-
URL:
/api/tasks/ -
Método:
GET -
Descripción: Retorna la lista de tareas asociadas al usuario autenticado.
-
Parámetros opcionales (query string):
created_at: Filtra tareas por la fecha de creación (formato:YYYY-MM-DD)search: Filtra tareas que contengan cierta palabra en el título o la descripción
-
Ejemplo de respuesta:
{ "count": 3, "next": null, "previous": null, "results": [ { "id": 1, "title": "Nueva Tarea", "description": "Descripción de la tarea", "created_at": "2025-02-24T20:38:54.054316Z", "completed": false }, { "id": 2, "title": "Nueva Tarea 2", "description": "Descripción de la tarea", "created_at": "2025-02-24T20:38:55.911442Z", "completed": true }, { "id": 3, "title": "Nueva Tarea", "description": "Descripción de la tarea", "created_at": "2025-02-24T20:38:56.720657Z", "completed": true } ] }
-
URL:
/api/tasks/ -
Método:
POST -
Content-Type:
application/json -
Descripción: Crea una nueva tarea para el usuario autenticado.
-
Payload de la solicitud:
{ "title": "Nueva Tarea", "description": "Descripción de la nueva tarea" } -
Ejemplo de respuesta (código 201):
{ "id": 3, "title": "Nueva Tarea", "description": "Descripción de la nueva tarea", "created_at": "2025-02-25T10:00:00Z", "completed": false }
-
URL:
/api/tasks// -
Método:
GET -
Descripción: Obtiene los detalles de una tarea específica.
-
Ejemplo de respuesta:
{ "id": 3, "title": "Nueva Tarea", "description": "Descripción de la nueva tarea", "created_at": "2025-02-25T10:00:00Z", "completed": false }
-
URL:
/api/tasks// -
Método:
PUT -
Content-Type:
application/json -
Descripción: Actualiza completamente una tarea existente. Todos los campos deben incluirse.
-
Payload de la solicitud:
{ "title": "Tarea Actualizada", "description": "Descripción actualizada", "completed": true } -
Ejemplo de respuesta:
{ "id": 3, "title": "Tarea Actualizada", "description": "Descripción actualizada", "created_at": "2025-02-25T10:00:00Z", "completed": true }
-
URL:
/api/tasks// -
Método:
PATCH -
Content-Type:
application/json -
Descripción: Actualiza parcialmente una tarea. Solo se deben incluir los campos que se desean modificar.
-
Payload de la solicitud (ejemplo):
{ "completed": true } -
Ejemplo de respuesta:
{ "id": 3, "title": "Tarea Actualizada", "description": "Descripción actualizada", "created_at": "2025-02-25T10:00:00Z", "completed": true }
- URL:
/api/tasks// - Método:
DELETE - Descripción: Elimina la tarea especificada.
- Respuesta:
- Código de estado
204 No Contenten caso de éxito.
- Código de estado
-
Registro y Login:
- Envía una solicitud
POSTa/api/register/con las credenciales del usuario para crear un nuevo usuario. - Envía una solicitud
POSTa/api/login/con las credenciales del usuario para recibir el token del usuario, - El token se debe incluir en el header
Authorizationpara las siguientes solicitudes a los endpoints de tareas.
- Envía una solicitud
-
Gestión de Tareas:
- Para crear, listar, actualizar o eliminar tareas, se utilizan los endpoints de
/api/tasks/asegurándote de enviar el header con el token:Authorization: Token
- Para crear, listar, actualizar o eliminar tareas, se utilizan los endpoints de
-
Filtrado de Tareas:
- Puedes combinar parámetros de consulta en el endpoint de listado. Por ejemplo:
GET /api/tasks/?created_at=2025-02-23&search=ejemplo
- Puedes combinar parámetros de consulta en el endpoint de listado. Por ejemplo:
Observaciones: Se adjunta el archivo
Invera.postman_collection.jsoncon la definicion de todos endpoints para realizar las pruebas desde Postman. Recordar que es necesario incluir el header:
Authorization: Token