--- title: Mesa React Beta emoji: "🌖" colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 pinned: false --- # MESA React Beta (FastAPI + React) Rearquitetura do app MESA com: - `backend/` em FastAPI - `frontend/` em React (Vite) - Reuso do core estatistico e de negocio original (elaboracao + visualizacao) ## Estrutura - `backend/app/main.py`: inicializacao da API - `backend/app/api/`: rotas de sessao, elaboracao e visualizacao - `backend/app/services/`: orquestracao dos fluxos - `backend/app/core/elaboracao`: core de elaboracao reaproveitado - `backend/app/core/visualizacao`: core de visualizacao reaproveitado - `frontend/src`: interface React ## Backend ```bash cd backend python3.12 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ./run_backend.sh ``` Observacao: o stack geoespacial do backend fecha melhor com Python 3.12 no macOS. Se `backend/.venv` existir, `./run_backend.sh` passa a usa-lo automaticamente. API: `http://localhost:8000` Swagger: `http://localhost:8000/docs` ## Frontend ```bash cd frontend npm install npm run dev ``` Frontend: `http://localhost:5173` Para apontar para outro backend: ```bash VITE_API_BASE=http://localhost:8000 npm run dev ``` No build de producao servido pelo proprio backend, o frontend passa a usar a mesma origem (`/api`) por padrao. ## Repositório de modelos `.dai` Os modelos usados em **Pesquisa**, **Elaboração** (carregar modelo existente) e **Visualização** (carregar modelo existente) podem vir de duas fontes: - `local` (pasta do projeto) - `hf_dataset` (dataset no Hugging Face) Variáveis de ambiente do backend: - `MODELOS_REPOSITORIO_PROVIDER` (`local` ou `hf_dataset`) - `MODELOS_REPOSITORIO_LOCAL_DIR` (opcional, quando `local`) - `MODELOS_REPOSITORIO_HF_REPO_ID` (ex.: `gui-sparim/repositorio_mesa`) - `MODELOS_REPOSITORIO_HF_REVISION` (ex.: `main`) - `MODELOS_REPOSITORIO_HF_SUBDIR` (ex.: `modelos_dai`) - `HF_TOKEN` (obrigatório para ler dataset privado e para gravar cadastros/edições em produção) Base de Trabalhos Técnicos: - Fora do HF Spaces, o app usa por padrão o banco SQLite local. - Em runtime HF Spaces, o app usa por padrão o banco SQLite hospedado no dataset. - Override opcional: `TRABALHOS_TECNICOS_PROVIDER` (`local` ou `hf_dataset`) - Banco local: `TRABALHOS_TECNICOS_DB_LOCAL_PATH` - Banco no dataset: `TRABALHOS_TECNICOS_HF_REPO_ID`, `TRABALHOS_TECNICOS_HF_REVISION`, `TRABALHOS_TECNICOS_HF_PATH` Geração do banco local de Trabalhos Técnicos: - Script: `backend/scripts/build_trabalhos_tecnicos_db.py` - Planilha padrão de origem: `~/Downloads/AVALIANDOS_20260515_corrigido_v2.xlsx` - Exemplo: `backend/.venv/bin/python backend/scripts/build_trabalhos_tecnicos_db.py` - Saída padrão: `backend/local_data/trabalhos_tecnicos.sqlite3` - O arquivo SQLite local fica ignorado no git e deve ser enviado manualmente ao dataset `gui-sparim/repositorio_mesa` no caminho `trabalhos_tecnicos/trabalhos_tecnicos.sqlite3`. Regra automática de provider: - Em runtime HF Spaces (`SPACE_ID`/`SPACE_AUTHOR_NAME`/`HF_SPACE_ID`), o backend força `hf_dataset`. - Fora do HF Spaces, o fallback continua `local` quando o provider não é informado. No modo `hf_dataset`, o backend consulta a revisão atual do dataset e só sincroniza novamente quando detectar mudança de revisão. Ao cadastrar trabalhos técnicos, o backend migra automaticamente bancos SQLite antigos do dataset que ainda não tenham as colunas de links usadas pela versão atual, preservando os registros existentes. ## Login simples O app exige autenticação para qualquer rota `/api` (exceto `health` e `login`). - Endpoint de login: `POST /api/auth/login` com `usuario` e `matricula` - O frontend usa token no header `X-Auth-Token` - Usuários padrão: `backend/app/core/auth/usuarios.json` Variáveis opcionais: - `APP_USERS_FILE` para apontar um JSON alternativo de usuários - `APP_USERS_JSON` para injetar o JSON via secret/variável de ambiente ## Logs de auditoria Logs são gravados em JSONL por escopo: - `auth` - `repositorio` - `trabalhos_tecnicos` - `elaboracao` - `visualizacao` Comportamento por ambiente: - **Local (`MODELOS_REPOSITORIO_PROVIDER=local`)**: logs desativados. - **Produção HF (`MODELOS_REPOSITORIO_PROVIDER=hf_dataset`)**: logs gravados e lidos no dataset, em `logs/`. Variável opcional: - `APP_LOGS_MODE` (`auto`/`enabled`/`disabled`) para forçar o modo de logs.