# Backend no Firebase (fase 2)

Firestore + Cloud Functions + Firebase Auth, substituindo o backend NestJS.
Arquitetura e o **porquê** de cada escolha: `docs/spikes/backend-firebase.md`.

> **Nada aqui exige plano Blaze.** O Emulator Suite roda local e de graça; o
> cartão só entra no dia do deploy. É o que permitiu começar a migração sem
> depender de decisão financeira.

## O que instalar

```bash
brew install openjdk        # o emulador do Firestore é escrito em Java
npm install                 # firebase-tools fica pinado aqui, não global
npm --prefix functions install
```

O OpenJDK do Homebrew é **keg-only**: instala mas não entra no `PATH`. Você não
precisa fazer nada — `scripts/firebase.sh` procura nos lugares conhecidos. Se
estiver em outro, exporte `JAVA_HOME`.

## Como rodar

```bash
npm run emuladores          # Firestore 8080 · Auth 9099 · Functions 5001 · UI 4000
npm test                    # sobe emulador, roda os testes, derruba
npm run build               # compila as Functions
```

Use sempre `scripts/firebase.sh` (é o que os scripts do npm fazem) em vez de
chamar `firebase` direto — ele resolve o Java e barra projeto real.

## Duas travas que existem de propósito

**O projeto é `demo-bolao`.** O Firebase trata id com prefixo `demo-` como
projeto de demonstração: o SDK **nunca** fala com serviço real. É a proteção
contra rodar teste contra produção sem perceber. Para apontar para um projeto de
verdade é preciso ser explícito:

```bash
FIREBASE_PROJETO=meu-projeto PERMITIR_PROJETO_REAL=true ./scripts/firebase.sh deploy
```

**As rules começam fechadas** (`allow read, write: if false`). Participação entra
em `MG-2`, sigilo e prazo em `MG-3`. Abrir primeiro e fechar depois é como um
vazamento chega em produção: o estado intermediário parece funcionar.

## Armadilha registrada

No macOS existe um **stub** em `/usr/bin/java` que responde ao `command -v` e
falha ao executar, com a mesma mensagem de "Java não instalado". Testar presença
não serve; o script testa **execução** (`java -version`). Foi assim que a
primeira tentativa de subir o emulador falhou por um motivo que não tem nada a
ver com Firebase.
