Repository navigation
Firebase e Firestore
| 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çã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 |
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.
solicitacaoId e criadoEm. É criada no mesmo lote da solicitação e removida no lote da decisão (ver Fluxos de Acesso).
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.
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).
-
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).
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.
| 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/).
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.
Visão geral
Acesso e segurança
Infraestrutura
Desenvolvimento