--- title: Assuntos Juridicos API emoji: ⚖️ colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 --- # ⚖️ Assuntos Jurídicos — FastAPI + Elasticsearch API de busca full-text sobre **5.184 assuntos jurídicos** do STJ/TST em 22 ramos do Direito. --- ## 🚀 Dois modos de execução ### Modo 1 — HuggingFace Spaces (single container) > ES + FastAPI **no mesmo container** — sem docker-compose ```bash # HuggingFace usa apenas o Dockerfile automaticamente # ES_HOST padrão = http://localhost:9200 ``` O `entrypoint.sh` faz tudo: 1. Inicia Elasticsearch em background (porta 9200 local) 2. Baixa `bulk_assuntos.ndjson` do GitHub (~15 MB) 3. FastAPI indexa os dados no startup 4. API disponível em `:7860` ### Modo 2 — Desenvolvimento local (docker-compose) ```bash git clone https://huggingface.co/spaces/SEU_USER/SEU_SPACE cd SEU_SPACE # Sobe ES separado + API (ES_HOST=http://elasticsearch:9200) docker compose up --build # Acesse open http://localhost:7860/docs ``` --- ## 📡 Endpoints | Método | Rota | Descrição | |--------|------|-----------| | GET | `/` | Landing page | | GET | `/health` | Status API + ES | | GET | `/busca?q=...` | Full-text + filtros + facets | | POST | `/busca` | Busca via JSON | | GET | `/autocomplete?q=...` | Typeahead | | GET | `/assuntos/{id}` | Detalhe por ID | | GET | `/hierarquia` | Árvore de ramos/categorias | | GET | `/grafo/filhos?ancestor=...` | Drill-down | | POST | `/admin/reindex` | Re-indexa tudo | | GET | `/docs` | Swagger UI | --- ## 🗂️ Estrutura ``` ├── Dockerfile ← single-container (ES + FastAPI) ├── docker-compose.yml ← multi-container (dev local) ├── entrypoint.sh ← inicia ES + download + uvicorn ├── app/ │ ├── main.py │ ├── routes.py │ ├── es_client.py │ ├── schemas.py │ ├── builders.py │ └── config.py ├── data/ │ └── es_mapping.json ← único arquivo de dados no repo └── scripts/ └── test_api.py ``` ## ⚙️ Variáveis de Ambiente | Variável | HF Spaces | Docker Compose | |----------|-----------|----------------| | `ES_HOST` | `http://localhost:9200` | `http://elasticsearch:9200` | | `ES_INDEX` | `assuntos_juridicos` | `assuntos_juridicos` | | `PORT` | `7860` | `7860` | | `WORKERS` | `1` | `1` | | `ES_JAVA_OPTS` | `-Xms512m -Xmx512m` | (gerenciado pelo ES container) |