Prueba Postulación Sendos.ai
Desarrollar una API RESTful utilizando Django que gestione una simple aplicación de inventario. La aplicación debe permitir crear, leer, actualizar y eliminar (CRUD) artículos en el inventario. Adicionalmente, debe implementar autenticación, pruebas unitarias y despliegue básico utilizando Docker.
-
Modelo de Datos de la tabla "inventory_api_item":
id
: Identificador único del artículo.name
: Nombre del artículo.description
: Descripción del artículo.quantity
: Cantidad disponible en el inventario.price
: Precio del artículo.- Datos adicionales agregados para un mejor control:
is_deleted
: Para manejar el borrado lógico de la base de datos.created_at
: Información de creación de un ítem.updated_at
: Información de actualización de un ítem.
-
Endpoints de la API:
GET api/v1/inventory/items/
: Obtener la lista de todos los artículos.POST api/v1/inventory/items/
: Crear un nuevo artículo.GET api/v1/inventory/items/{id}/
: Obtener detalles de un artículo específico.PUT api/v1/inventory/items/{id}/
: Actualizar un artículo específico.DELETE api/v1/inventory/items/{id}/
: Eliminar un artículo específico. (Borrado logico)- Endpoints adicionales para el registro e inicio de sesión con los cuales se obtiene el token:
POST api/v1/auth/register/
: Registrarse como usuario, retorna un token al ser exitoso.POST api/v1/auth/login/
: hacer login como usuario, retorna un token al ser exitoso.
- Endpoint adicional para inventario:
PATCH api/v1/inventory/items/{id}/
: Actualizar un campo de un artículo específico.
-
Autenticación:
- Implementar autenticación utilizando JWT (JSON Web Tokens) para proteger los endpoints.
- Respuesta: Fue implementado mediante un registro y un inicio de sesión, los cuales al ser exitosos, retornan un token para utilizar en el resto de los endpoints protegidos.
-
Pruebas Unitarias:
- Escribir pruebas unitarias para los modelos y los endpoints de la API.
- Respuesta: Se realizaron 3 pruebas en
accounts_api
y 8 pruebas eninventory_api
.
-
Despliegue con Docker:
- Crear un archivo
Dockerfile
y un archivodocker-compose.yml
para contenerizar la aplicación y su base de datos (por ejemplo, PostgreSQL).
- Crear un archivo
-
Documentación:
- Proveer documentación sobre cómo configurar y ejecutar el proyecto localmente y cómo usar la API (puede ser un archivo README).
-
Correctitud Funcional:
- Todos los endpoints deben funcionar según lo especificado.
- La autenticación debe estar correctamente implementada y proteger los endpoints.
-
Calidad del Código:
- El código debe estar bien organizado, limpio y seguir las mejores prácticas de Django.
- Utilización adecuada de patrones de diseño y arquitectura.
-
Pruebas:
- Presencia y calidad de las pruebas unitarias.
- Cobertura de pruebas.
-
Despliegue:
- Correcta implementación de Docker y docker-compose para el despliegue de la aplicación.
- La aplicación debe ser capaz de ejecutarse correctamente en un entorno Docker.
-
Documentación:
- La documentación debe ser clara y comprensible, facilitando la configuración y el uso del proyecto.
Entrega límite: 22 de junio.
-
Requerimientos:
- Python
- GIT
- Docker
- Docker Compose
-
Instalación:
- Clonar el repositorio de GitHub con el comando:
git clone https://github.com/andresgmg/inventory-sendos-ai.git
- Entrar a la carpeta del proyecto:
cd inventory-sendos-ai
- Crear un archivo
.env
en la raíz del proyecto. (pedir el archivo al administrador)
- Clonar el repositorio de GitHub con el comando:
-
Configuración y ejecución con Docker:
- Construir y levantar los contenedores con Docker Compose:
docker-compose up --build
- En una terminal separada, aplicar las migraciones:
docker-compose exec web python manage.py migrate
- Construir y levantar los contenedores con Docker Compose:
-
Acceso a la API:
- La API estará disponible en
http://localhost:8000
.
- La API estará disponible en
-
Ejecutar pruebas:
- En una terminal separada, ejecutar las pruebas:
docker-compose exec web python manage.py test
- En una terminal separada, ejecutar las pruebas:
-
Comandos adicionales:
- Para crear un superusuario de Django:
docker-compose exec web python manage.py createsuperuser
- Para detener los contenedores:
docker-compose down
- Para acceder al contenedor de la web:
docker-compose exec web sh
- Para crear un superusuario de Django: