Skip to content

Firebase e Firestore

CAKeysama edited this page Sep 30, 2026 · 1 revision

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 → projeto demo-retool nos emuladores locais;
  • VITE_USE_FALLBACK_DB=true → variáveis VITE_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}, com categoria igual a imagem_peca, imagem_dispositivo ou documento_pdf.
  • Regras (storage.rules):
    • leitura para contas operacionais;
    • envio para Administração e Projetista, até 25 MB, e somente image/jpeg, image/png, image/webp ou application/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 para functions/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.

Clone this wiki locally