8000 GitHub - jbayron09/lite_inventory_api
[go: up one dir, main page]

Skip to content

jbayron09/lite_inventory_api

Repository files navigation

🧾 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

  1. Clona el proyecto
git clone https://github.com/tu_usuario/lite_inventory_api.git
cd lite_inventory_api
  1. Levanta los contenedores
docker-compose up --build
  1. Entra al contenedor para ejecutar comandos
docker exec -it lite_inventory_api_web bash
  1. Aplica migraciones
python manage.py migrate
  1. Crea superusuario (una vez)
python manage.py createsuperuser
  1. Carga fixtures (datos iniciales)
python manage.py loaddata companies/fixtures/companies.json
python manage.py loaddata products/fixtures/products.json
  1. 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0