🧾 Lite Inventory API – Backend (Prueba Técnica)
Este proyecto es una API desarrollada en Django con GraphQL (Graphene-Django) como parte de una prueba técnica para Lite Thinking. El objetivo principal es evaluar habilidades en arquitectura limpia, autenticación segura, manejo de roles y operaciones sobre inventario, productos y empresas.
Todo el backend corre en un entorno Dockerizado y expone funcionalidades para gestionar usuarios, roles, empresas, productos con precios en múltiples monedas e inventario por empresa.
👨💻 Desarrollado por
Jorge Bairon Bermudez Leon
📍 Armenia, Quindío
📧 j.bayron.b@gmail.com 🔗 LinkedIn
🛠️ Tecnologías utilizadas
- Python 3.11
- Django 4+
- GraphQL (Graphene-Django + Relay)
- PostgreSQL
- JWT (Autenticación con graphql-jwt)
- Docker & Docker Compose
- Bcrypt (
make_password
) para hashing seguro de contraseñas
📂 Estructura del proyecto (modular)
accounts/
├── models.py # Modelo de usuario personalizado
├── managers.py # Lógica de creación de usuario y superusuario
├── admin.py # Registro en Django Admin
├── nodes.py # GraphQL Node
├── mutations.py # Mutaciones para crear y actualizar usuario
├── enums.py / constants.py / choices.py
companies/
├── models.py # Modelo de empresa
├── nodes.py / mutations.py / filters.py
products/
├── models.py # Producto + múltiples precios (por moneda)
├── nodes.py / mutations.py / filters.py
inventory/
├── models.py # Productos por empresa + stock
├── nodes.py / mutations.py / filters.py
🔐 Seguridad de contraseñas
Las contraseñas son encriptadas usando make_password
de Django, que utiliza:
- Algoritmo PBKDF2 + SHA256
- Sal única por usuario
- Compatible con
check_password
🧩 Roles implementados
- ADMIN: Puede crear/editar/eliminar empresas y gestionar inventario
- EXTERNAL: Solo puede visualizar
Los usuarios nuevos son EXTERNAL por defecto. El rol solo puede ser modificado por un ADMIN desde Django Admin o futuras mutaciones protegidas.
🐳 Cómo ejecutar el proyecto con Docker
- Clona el proyecto
git clone https://github.com/tu_usuario/lite_inventory_api.git
cd lite_inventory_api
- Levanta los contenedores
docker-compose up --build
- Entra al contenedor para ejecutar comandos
docker exec -it lite_inventory_api_web bash
- Aplica migraciones
python manage.py migrate
- Crea superusuario (una vez)
python manage.py createsuperuser
- Carga fixtures (datos iniciales)
python manage.py loaddata companies/fixtures/companies.json
python manage.py loaddata products/fixtures/products.json
- Accede a GraphQL Playground http://localhost:8000/graphql
📮 Mutaciones disponibles
createUser
,updateUser
,changePassword
createCompany
,updateCompany
,deleteCompany
createProduct
,updateProduct
,deleteProduct
createInventory
,updateInventory
,deleteInventory
✍ Ejemplo de mutación (createCompany)
mutation {
createCompany(input: {
name: "Acme S.A.S.",
nit: "123456789",
address: "Carrera 1 #23-45",
city: "Medellín"
}) {
company {
id
name
}
}
}
✅ Validaciones implementadas
- Email único por usuario
- Rol no editable desde input (solo admin)
- Acceso restringido por
@login_required
y validación de rol - Restricciones de relaciones (
unique_together
,ForeignKey
, etc.)
📬 Contacto Si deseas revisar o extender este proyecto, puedes contactarme por cualquiera de los siguientes medios:
Jorge Bairon Bermudez Leon
📧 j.bayron.b@gmail.com 🔗 LinkedIn