Skip to content

elainefs/django-sge

Repository files navigation

Sistema de Gerenciamento de Estoque - SGE



📘 Sobre

Aplicação FullStack desenvolvida usando Djanto e Djanto REST framework para fazer o gerenciamento de estoque.

A aplicação possui uma interface web para manipulação de informações, bem como uma API RESTful, além disso, há integração com uma aplicação de notificações para o envio de notificações por e-mail e WhatsApp via API do CallMeBot.

Além disso, utiliza a IA generativa da OpenAI para fornecer de insights e recomendações sobre os produtos do estoque.

🌐 Acesse: https://django-sge.onrender.com

Nota: Como esta é uma aplicação de demonstração hospedada no plano gratuito do Render, o primeiro acesso após período de inatividade pode levar 30-60 segundos para carregar, exibindo a tela padrão de carregamento do Render. Acessos subsequentes são instantâneos!

SGE - Dashboard

💻️ Tecnologias

  • Python
  • Django
  • Django REST framework
  • PostgreSQL

✅ Funcionalidade

  • Autenticação com JWT para proteger os endpoints da API.
  • Integração via Webhook para disparo de notificações de movimentação de estoque.
  • Listagem, criação, atualização e deleção de produtos.
  • Listagem, criação, atualização e deleção de marcas de produtos.
  • Listagem, criação, atualização e deleção de categorias de produtos.
  • Listagem, criação, atualização e deleção de fornecedores de produtos.
  • Listagem, criação, atualização e deleção de entradas e saídas de produtos.

⚙️ Como usar

Executar a aplicação via Docker

Certifique-se de ter o Docker e Docker Compose instalados, em seguida siga os seguintes passos:

  1. Clone o repositório
git clone https://github.com/elainefs/django-sge.git

cd django-sge
  1. Crie um arquivo .env na raiz do projeto

O arquivo .env-example é um modelo de como o seu arquivo .env deve ser.

Para gerar uma nova SECRET_KEY, a partir da raiz do projeto, use o seguinte comando no terminal:

python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Adicione a sua SECRET_KEY a sua .env e edite as demais informações conforme suas preferências.

Forneça a url do sistema de notificações em NOTIFICATION_URL.

Para usar o recurso de IA é necessário fornecer o modelo e a chave de API através das variáveis OPENAI_API_KEY e OPENAI_MODEL.

  1. Execute o Docker Compose
docker compose up --build -d
  1. Crie um super usuário
docker exec -it sge_web python manage.py createsuperuser

Executar a aplicação localmente sem Docker

Para executar essa aplicação siga os seguintes passos:

  1. Clone o repositório
git clone https://github.com/elainefs/django-sge.git

cd django-sge
  1. Crie e ative um ambiente virtual
python3 -m venv .venv # Para Windows use: python -m venv .venv

source .venv/bin/activate  # Para Windows use: .venv\Scripts\activate
  1. Instale as dependências do projeto
pip install -r requirements.txt
  1. Crie um arquivo .env na raiz do projeto

O arquivo .env-example é um modelo de como o seu arquivo .env deve ser.

Para gerar uma nova SECRET_KEY, a partir da raiz do projeto, use o seguinte comando no terminal:

python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Adicione a sua SECRET_KEY a sua .env e edite as demais informações conforme suas preferências.

Forneça a url do sistema de notificações em NOTIFICATION_URL.

Para usar o recurso de IA é necessário fornecer o modelo e a chave de API através das variáveis OPENAI_API_KEY e OPENAI_MODEL.

  1. Execute as migrações no banco de dados
python3 manage.py migrate
  1. Crie um super usuário
python3 manage.py createsuperuser
  1. Execute a aplicação
python3 manage.py runserver

A aplicação estará disponível em http://localhost:8000.

O gerenciamento pode ser feito através da interface do Django Admin em: http://localhost:8000/admin/

Você pode interagir com a API utilizando ferramentas como Postman, Insomnia, entre outras.

🔗 Endpoints da API

Autenticação JWT

Para ter acesso aos dados da API é necessário um token JWT.

O access token possui validade de 1 dia e o refresh de 7 dias.

Criação de Token

POST - http://localhost:8000/api/v1/authentication/token/

Passe as informações do usuário cadastrado no sistema no body da requisição:

{
    "username": "admin",
    "password": "admin"
}

Verificação do Token

POST - http://localhost:8000/api/v1/authentication/token/verify/

Passe o access token obtido na criação no body da requisição:

{
    "token": "access_token"
}

Refresh Token

POST - http://localhost:8000/api/v1/authentication/token/refresh/

Passe o refresh token obtido na criação no body da requisição:

{
    "refresh": "refresh_token"
}

Marcas

Criar marcas de produtos

POST - http://localhost:8000/brands/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Request Body:

{
  "name": "Dell",
  "description": "Descrição da marca"
}

Listar todas as marcas

GET - http://localhost:8000/brands/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Listar marca por ID

GET - http://localhost:8000/brands/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_marca

Atualizar marca

PUT - http://localhost:8000/brands/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_marca

Request Body:

{
  "name": "Dell",
  "description": "Descrição da marca"
}

Excluir marca

DELETE - http://localhost:8000/brands/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_marca

Categorias

Criar categoria de produtos

POST - http://localhost:8000/categories/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Request Body:

{
  "name": "Notebook",
  "description": "Descrição da categoria"
}

Listar todas as categorias

GET - http://localhost:8000/categories/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Listar categorias por ID

GET - http://localhost:8000/categories/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_categoria

Atualizar categoria

PUT - http://localhost:8000/categories/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_categoria

Request Body:

{
  "name": "Notebook",
  "description": "Descrição da categoria"
}

Excluir categoria

DELETE - http://localhost:8000/categories/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_categoria

Entradas de produtos

Criar entrada de produtos

POST - http://localhost:8000/inflows/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Request Body:

{
    "product": 1
    "supplier": 1,
    "quantity": 10,
    "description": "Compra de 10 notebooks.",
}

Listar todas as entradas

GET - http://localhost:8000/inflows/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Listar entrada por ID

GET - http://localhost:8000/inflows/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_entrada

Para manter a integridade do banco, a menos que o usuário seja um super usuário logado pelo painel administrativo do Django, não é permitido excluir ou atualizar entradas.

Saídas de produtos

Criar saída de produtos

POST - http://localhost:8000/outflows/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Request Body:

{
  "product": 1,
  "quantity": 10,
  "description": "Venda de 10 notebooks."
}

Listar todas as saídas

GET - http://localhost:8000/outflows/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Listar entrada por ID

GET - http://localhost:8000/outflows/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_saida

Para manter a integridade do banco, a menos que o usuário seja um super usuário logado pelo painel administrativo do Django, não é permitido excluir ou atualizar saídas.

Produtos

Criar produto

POST - http://localhost:8000/products/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Request Body:

{
  "title": "Rayzen 5 5500U",
  "description": "Processador para notebooks.",
  "serie_number": "40180480180810",
  "cost_price": "150.00",
  "selling_price": "239.00",
  "quantity": 7,
  "category": 3,
  "brand": 4
}

Listar todos os produtos

GET - http://localhost:8000/products/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Listar produtos por ID

GET - http://localhost:8000/products/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_do_produto

Atualizar produto

PUT - http://localhost:8000/products/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_do_produto

Request Body:

{
  "title": "Rayzen 5 5500U",
  "description": "Processador para notebooks.",
  "serie_number": "40180480180810",
  "cost_price": "150.00",
  "selling_price": "239.00",
  "quantity": 7,
  "category": 3,
  "brand": 4
}

Excluir produto

DELETE - http://localhost:8000/products/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_da_produto

Fornecedores

Criar fornecedor de produtos

POST - http://localhost:8000/suppliers/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Request Body:

{
  "nome": "AMD LTDA",
  "description": "Empresa de processador para notebooks."
}

Listar todos os fornecedores

GET - http://localhost:8000/suppliers/api/v1/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Listar fornecedores por ID

GET - http://localhost:8000/suppliers/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_do_fornecedor

Atualizar produto

PUT - http://localhost:8000/suppliers/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_do_fornecedor

Request Body:

{
  "nome": "AMD LTDA",
  "description": "Empresa de processador para notebooks."
}

Excluir fornecedor

DELETE - http://localhost:8000/suppliers/api/v1/{id}/

Campos do header da requisição:

Campo Valor
Authorization Bearer token

Parâmetros

Campo Valor
id id_do_fornecedor

📄 Licença

Este projeto está sobre a licença MIT. Veja o arquivo LICENSE para mais informações.


Made with ❤️ by Elaine Ferreira

Releases

No releases published

Packages

No packages published

Languages