Projeto desenvolvido para o "God Level Coder Challenge"
Esta é a API backend da plataforma "Maria BI", uma solução de analytics flexível projetada para donos de restaurantes que não são técnicos.
Em vez de dashboards fixos, esta API fornece um "motor" de analytics poderoso. Ela expõe um único endpoint (POST /api/v1/query) que aceita "perguntas" em formato JSON e as traduz em queries SQL seguras e otimizadas contra o banco de dados PostgreSQL do desafio.
-
Framework: FastAPI (Python)
- Por quê? Performance nativa, validação de dados moderna com Pydantic (que usamos no
schemas.py) e geração automática de documentação interativa (/docs), o que é perfeito para testar o "contrato" da API.
- Por quê? Performance nativa, validação de dados moderna com Pydantic (que usamos no
-
Construtor de Query: SQLAlchemy (Core)
- Por quê? Esta é a decisão de segurança e flexibilidade mais importante. Em vez de concatenar strings de SQL (o que causa vulnerabilidades de SQL Injection), usamos o SQLAlchemy Core para construir as queries programaticamente. Nosso
query_builder.pymapeia o JSON de "pergunta" da Maria diretamente para objetos SQLAlchemy, garantindo que apenas queries seguras sejam executadas.
- Por quê? Esta é a decisão de segurança e flexibilidade mais importante. Em vez de concatenar strings de SQL (o que causa vulnerabilidades de SQL Injection), usamos o SQLAlchemy Core para construir as queries programaticamente. Nosso
-
Banco de Dados: PostgreSQL (conforme requisito)
- Driver:
psycopg2-binarycom pooling de conexão para performance.
- Driver:
-
"Contrato" da API: O
schemas.pyusaEnumePydanticpara validar rigorosamente todas as métricas, dimensões e filtros permitidos, rejeitando qualquer pedido mal formado na borda da API.
Siga estes passos para rodar o servidor da API na sua máquina.
- Python 3.10+ instalado.
- PostgreSQL instalado e rodando.
- Um banco de dados criado (ex:
restaurantes_db). - O banco de dados populado usando o script
generate_data.pyfornecido pelo desafio.
git clone [https://github.com/SEU_USUARIO/SEU_REPOSITORIO.git](https://github.com/gabrielnunes720/God-Level-Coder-Challenge.git)
cd SEU_REPOSITORIO/backendÉ uma boa prática isolar as dependências do projeto.
# Crie o ambiente (pasta 'venv')
python -m venv venv
# Ative o ambiente
# No macOS / Linux:
source venv/bin/activate
# No Windows (PowerShell):
.\venv\Scripts\Activate.ps1Usando o arquivo que criamos:
pip install -r requirements.txtAbra o arquivo backend/app/main.py e edite o dicionário DB_CONFIG com as suas credenciais reais do PostgreSQL:
# Em backend/app/main.py
DB_CONFIG = {
"dbname": "postgres", # O nome do seu banco
"user": "postgres", # Seu usuário do Postgres
"password": "sua_senha_segura", # Sua senha
"host": "localhost",
"port": "5432"
}Dentro da pasta backend, execute o Uvicorn:
# Sintaxe: uvicorn [pasta].[arquivo]:[objeto_app] --reload
uvicorn app.main:app --reloadapp.main: Refere-se ao arquivobackend/app/main.pyapp: Refere-se ao objetoapp = FastAPI()dentro daquele arquivo.--reload: Reinicia o servidor automaticamente quando você salvar uma alteração no código.
Se tudo deu certo, você verá uma saída parecida com:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
A melhor parte do FastAPI: a documentação é o seu "playground" de testes.
-
Com o servidor rodando, abra seu navegador e acesse: http://127.0.0.1:8000/docs
-
Você verá a documentação interativa. Clique no endpoint
POST /api/v1/querye depois no botão "Try it out". -
No campo "Request body", cole o JSON abaixo para fazer uma "pergunta" de teste.
{
"metrica": "faturamento_total",
"dimensoes": [
"loja_nome"
],
"filtros": [
{
"campo": "status_venda",
"operador": "eq",
"valor": "COMPLETED"
}
],
"ordenar_por": "metrica",
"ordem": "DESC",
"limite": 3
}- Clique em "Execute".
A API irá usar o query_builder para traduzir esse JSON, executar no banco, e retornar o ranking das suas 3 melhores lojas!