# Guia de IntegraΓ§Γ£o da API de Suprimentos ## πŸ“‹ VisΓ£o Geral Este projeto integra dados da **API de Suprimentos** com os dados do **SQL Server**. A integraΓ§Γ£o faz um join automΓ‘tico por PDV e SKU, mapeando a quantidade da API para o campo "sugestΓ£o Analista". ## πŸ” ConfiguraΓ§Γ£o Segura do Token ### 1. Arquivo `.env` (NUNCA commit ao Git!) O token da API Γ© armazenado de forma segura em um arquivo `.env` na raiz do projeto: ``` API_SUPRIMENTOS_TOKEN=seu_token_jwt_aqui API_SUPRIMENTOS_DETALHE_URL=https://api.grupoginseng.com.br/api/suprimentos_detalhepedido?limit=50000&status=pendente API_SUPRIMENTOS_IMPLANTACAO_URL=https://api.grupoginseng.com.br/api/vw_suprimentos_implantacaopedido?limit=50000 ``` ### 2. Protegendo o Token **IMPORTANTE:** Adicione o arquivo `.env` ao `.gitignore` para nunca expor o token: ```bash # .gitignore .env *.pyc __pycache__/ db.sqlite3 ``` ### 3. Usando o Token em ProduΓ§Γ£o Para produΓ§Γ£o, configure as variΓ‘veis de ambiente no servidor/container: ```bash # Docker Compose environment: API_SUPRIMENTOS_TOKEN: ${API_SUPRIMENTOS_TOKEN} # Servidor Linux export API_SUPRIMENTOS_TOKEN="seu_token_aqui" ``` ## πŸ”„ Como Funciona a IntegraΓ§Γ£o ### Fluxo de Dados ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ SQL Server β”‚ β”‚ (estoque_mar_historico + draft_historico) β”‚ β”‚ - PDV, SKU, Estoque, TrΓ’nsito, etc. β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ views.get_pivot_data() β”‚ β”‚ - Busca dados SQL β”‚ β”‚ - Busca dados API β”‚ β”‚ - Faz JOIN β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ API de Suprimentos β”‚ β”‚ (com autenticaΓ§Γ£o JWT) β”‚ β”‚ - PDV, SKU, quantidade β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Dados Mesclados β”‚ β”‚ sugestao_analista = β”‚ β”‚ quantidade (da API) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### FunΓ§Γ΅es Principais #### 1. `get_api_suprimentos_data()` - Busca dados da API com token JWT - Retorna `None` se falhar (nΓ£o quebra a pΓ‘gina) - Timeout de 30 segundos #### 2. `merge_api_with_sql_data()` - Faz JOIN por (PDV, SKU) - Mapeia `quantidade` β†’ `sugestao_analista` - Adiciona campo `dados_api_presentes` (true/false) #### 3. `get_pivot_data()` - CombinaΓ§Γ£o de dados SQL + API - Retorna `api_integrated: true` se dados foram mesclados ## πŸ“Š Campos Mapeados | Tabela SQL | Campo da API | Campo Resultante | |-----------|-------------|-----------------| | PDV | PDV | PDV (chave join) | | SKU | SKU | SKU (chave join) | | - | quantidade | sugestao_analista | ## πŸš€ Como Usar ### Setup Inicial ```bash # 1. Instalar dependΓͺncias pip install -r requirements.txt # 2. Criar arquivo .env cp .env.example .env # Editar .env e adicionar seu token JWT # 3. Executar o servidor python manage.py runserver ``` ### Na PΓ‘gina Os dados serΓ£o automaticamente mesclados ao carregar a tabela. VocΓͺ verΓ‘: - **Quando API estΓ‘ disponΓ­vel**: - Coluna `sugestao_analista` preenchida com dados da API - Log no console: "Dados da API integrados: X registros" - **Quando API falha ou token invΓ‘lido**: - Dados do SQL Server continuam aparecendo - Log de erro aparece no terminal - PΓ‘gina nΓ£o quebra ## ⚠️ Tratamento de Erros A integraΓ§Γ£o Γ© **resiliente**: βœ… Se a API cair β†’ pΓ‘gina continua funcionando com dados do SQL βœ… Se o token expirar β†’ backend usa dados do SQL βœ… Se PDV/SKU nΓ£o matcham β†’ campo fica `null` ## πŸ” Debug ### Ver logs da integraΓ§Γ£o ```python # No terminal do servidor [2024-XX-XX XX:XX:XX] Dados da API integrados: 250 registros [2024-XX-XX XX:XX:XX] Erro ao chamar API: Connection timeout ``` ### Testar a integraΓ§Γ£o manualmente ```python # manage.py shell from home.views import get_api_suprimentos_data dados = get_api_suprimentos_data() print(f"Registros obtidos: {len(dados) if dados else 'None'}") ``` ## πŸ“ Exemplo de Resposta ```json { "status": "success", "data": [ { "PDV": "2001", "Descricao_PDV": "Loja Centro", "SKU": "ABC123", "Estoque_Total": 150, "sugestao_analista": 45, "dados_api_presentes": true, ... } ], "api_integrated": true } ``` ## πŸ›‘οΈ SeguranΓ§a - βœ… Token armazenado em `.env` (nΓ£o no cΓ³digo) - βœ… Arquivo `.env` no `.gitignore` - βœ… Timeout de conexΓ£o (30s) - βœ… Tratamento de erros silencioso - βœ… Logs detalhados para debug - βœ… Sem exposiΓ§Γ£o de senhas no cΓ³digo ## πŸ“ž Suporte Se encontrar problemas: 1. Verifique se o `.env` existe na raiz do projeto 2. Confirme que o token JWT Γ© vΓ‘lido 3. Verifique os logs no terminal do servidor 4. Teste manualmente com: `python manage.py shell`