Skip to content

ddeve/invera

 
 

Repository files navigation

Invera ToDo-List Challenge (Python/Django Jr-SSr)

  • 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.

Ejecución

  • 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 --build

esto 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.


Documentación de la API

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:8000 Nota:
Para acceder a los endpoints de Tareas, es necesario incluir en las solicitudes el header:

Authorization: Token


Endpoints de Autenticación

Registro de Usuario

  • URL: /api/register/

  • Método: POST

  • Content-Type: application/x-www-form-urlencoded o application/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"
    }

Login de 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..."
    }

Endpoints de Tareas

Importante: Todos los endpoints de tareas requieren autenticación. Se debe enviar el header:

Authorization: Token

Listar Tareas

  • 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
          }
      ]
    }

Crear Tarea

  • 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
    }

Recuperar Detalle de una Tarea

  • 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
    }

Actualización Completa de una Tarea

  • 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
    }

Actualización Parcial de una Tarea

  • 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
    }

Eliminar una Tarea

  • URL: /api/tasks//
  • Método: DELETE
  • Descripción: Elimina la tarea especificada.
  • Respuesta:
    • Código de estado 204 No Content en caso de éxito.

Uso en la Práctica

  1. Registro y Login:

    • Envía una solicitud POST a /api/register/ con las credenciales del usuario para crear un nuevo usuario.
    • Envía una solicitud POST a /api/login/ con las credenciales del usuario para recibir el token del usuario,
    • El token se debe incluir en el header Authorization para las siguientes solicitudes a los endpoints de tareas.
  2. 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 
  3. 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

Observaciones: Se adjunta el archivo Invera.postman_collection.json con la definicion de todos endpoints para realizar las pruebas desde Postman. Recordar que es necesario incluir el header:

Authorization: Token

About

ToDo Challenge

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%