Firebase e Firestore - CAKeysama/ReTool GitHub Wiki
Firebase e Firestore
Serviços usados
| Serviço | Uso | Configuração |
|---|---|---|
| Authentication (e-mail e senha) | Login, cadastro e criação de contas | Console |
| Cloud Firestore | Todos os dados | firestore.rules, firestore.indexes.json |
| Cloud Storage | Imagens e PDFs dos dispositivos | storage.rules |
| Cloud Functions (2ª geração, Node.js 22) | redefinirSenhaTemporaria |
retool/functions/ |
| Hosting | Publicação do build (dist/), com todas as rotas reescritas para index.html |
firebase.json |
A inicialização do SDK fica em src/data/datasources/firebase.ts. src/config/firebase.ts é apenas uma reexportação mantida por compatibilidade. A escolha do projeto depende do .env:
VITE_USE_FIREBASE_EMULATORS=true→ projetodemo-retoolnos emuladores locais;VITE_USE_FALLBACK_DB=true→ variáveisVITE_FIREBASE_FALLBACK_*;- caso contrário → variáveis
VITE_FIREBASE_*.
Os aliases de projeto (default e fallback) estão em Configuração do Ambiente.
O mesmo arquivo cria uma instância secundária do Firebase App (getSecondaryAuthApp()), usada só para a Administração criar contas sem perder a própria sessão, e o cliente de Functions na região southamerica-east1.
Coleções
| Coleção | Conteúdo | Detalhes |
|---|---|---|
users |
Perfis: cargo, situação e decisões | Usuários, Cargos e Permissões |
solicitacoes_cargo |
Pedidos de alteração de cargo | abaixo |
pendencias_cargo |
Trava de uma solicitação pendente por usuário (id = uid) |
abaixo |
notifications |
Notificações por destinatário | Notificações |
audit_logs |
Trilha de auditoria imutável | Logs e Auditoria |
dispositivos |
Dispositivos da ferramentaria | Módulos do Sistema |
categorias, familias, produtos, tipos |
Classificações (id, nome, ativo); tipos não tem tela |
Módulos do Sistema |
reutilizacoes |
Reutilizações e o estado do fluxo | abaixo |
solicitacoes_cargo/{id}
id, usuarioUid, usuarioNome, usuarioEmail, perfilAtual, perfilSolicitado, justificativa (opcional, até 500 caracteres), status (pendente, aprovada ou rejeitada), dataSolicitacao. Depois da decisão: decididoPorUid, decididoPorNome, dataDecisao e motivoDecisao (opcional). Os registros nunca são apagados.
pendencias_cargo/{uid}
solicitacaoId e criadoEm. É criada no mesmo lote da solicitação e removida no lote da decisão (ver Fluxos de Acesso).
reutilizacoes/{id}
dispositivoId, data, codigoPeca, descricaoPeca, produtoId, pesoPeca, hardSaving, responsavel, numeroOs, descricaoAlteracao, dataCriacao, status, solicitanteId/solicitanteNome, aprovadorId/aprovadorNome, dataAprovacao e motivoRejeicao. Os estados e as transições estão em Módulos do Sistema.
Regras do Firestore
firestore.rules é a camada de autorização do servidor. O termo "conta operacional" é definido em Usuários, Cargos e Permissões.
| Coleção | Leitura | Criação | Atualização | Exclusão |
|---|---|---|---|---|
users |
O próprio documento; contas operacionais leem todos; Convidado pendente só localiza a Administração | Administração (conta ativa, aprovada, com troca de senha obrigatória) ou autocadastro (sempre Convidado pendente) | Administração (com restrições: não altera o próprio cargo/status; decisão só a partir de pendente; conta ativa exige cargo e aprovação); o próprio usuário só o nome ou a conclusão da troca de senha |
Administração, nunca a própria conta |
solicitacoes_cargo |
Administração ou o solicitante | Conta operacional não-admin, em nome próprio, com a trava no mesmo lote | Administração, só pendente → aprovada/rejeitada, nunca a própria solicitação, com o cargo aplicado no mesmo lote |
Ninguém |
pendencias_cargo |
Administração ou o dono | O dono, junto com a solicitação | Ninguém | Administração, após a decisão |
audit_logs |
Administração | Qualquer autenticado, em nome próprio, com carimbo do servidor | Ninguém | Ninguém |
notifications |
O destinatário | Validada por tipo (ver Notificações) | O destinatário (lida/resolvida) |
Ninguém |
dispositivos, categorias, tipos, familias, produtos |
Contas operacionais | Administração e Projetista | Administração e Projetista | Administração |
reutilizacoes |
Contas operacionais | Sempre em nome próprio (solicitanteId): Engenharia só como "Em análise (Engenharia)"; Administração e Projetista em qualquer status |
Conforme a máquina de estados de cada cargo; Administração, qualquer | Administração |
Os testes das regras estão em src/tests/rules/firestore.rules.test.ts (ver Testes).
Cloud Storage
- Caminho:
retool/dispositivos/{dispositivoId}/{categoria}/{fileId}_{nome}, comcategoriaigual aimagem_peca,imagem_dispositivooudocumento_pdf. - Regras (
storage.rules):- leitura para contas operacionais;
- envio para Administração e Projetista, até 25 MB, e somente
image/jpeg,image/png,image/webpouapplication/pdf; - exclusão para a Administração.
- Validação na interface (
src/utils/fileValidators.ts): imagens até 10 MB e PDFs até 25 MB. - Ao excluir um dispositivo, a pasta dele é apagada (
FirebaseStorageService.deleteFolder).
Índices
Os índices compostos do projeto servem apenas à tela de Histórico de Ações. A página principal sobre eles é Logs e Auditoria → Índices do Firestore.
Cloud Functions
| Função | Tipo | Região | O que faz |
|---|---|---|---|
redefinirSenhaTemporaria |
Callable (onCall) |
southamerica-east1 |
Gera uma nova senha temporária para outra conta (ver Fluxos de Acesso) |
- Código em
retool/functions/src/, em TypeScript, compilado parafunctions/lib/(npm --prefix functions run build). - Limite de 5 instâncias (
maxInstances). - O deploy exige o plano Blaze do projeto.
- O cliente chama a função por
FirebaseContasService(src/data/services/).
Emuladores
Configurados em firebase.json: Auth na porta 9099, Firestore na 8181, Functions na 5001, Storage na 9199, com singleProjectMode e sem a interface web. Como usar: Configuração do Ambiente e Testes.