Manter dados obsoletos em seu banco de dados não é apenas uma questão de organização; é uma questão de custo e performance. Em aplicações como sistemas de bingo, convites de eventos ou tokens temporários, os dados perdem o valor após um curto período.
O recurso de TTL (Time-to-Live) do Firestore permite que você defina uma data de validade para um documento e deixe que o próprio Google se encarregue da “faxina”.
1. O que é o TTL? Link para o cabeçalho
O TTL é uma política de banco de dados onde o Firestore monitora um campo de carimbo de data/hora (Timestamp) específico. Quando o horário atual ultrapassa o horário definido nesse campo, o documento é marcado para exclusão.
Vantagens:
- Custo Zero: Você não paga pelas operações de exclusão (Delete) realizadas pelo TTL.
- Sem Servidor: Não é necessário criar Cloud Functions ou Cron Jobs para limpar o banco.
- Segurança: Garante que dados sensíveis temporários não fiquem armazenados indefinidamente.
2. Configurando a Interface no Angular Link para o cabeçalho
Para trabalhar com TTL, seu modelo de dados deve obrigatoriamente conter um campo do tipo Date ou Timestamp.
// lote.model.ts
export interface Lote {
id?: string;
criadoEm: Date;
expiraEm: Date; // Este campo será usado pelo TTL
cartelas: any[];
}
3. Implementando no Service Link para o cabeçalho
Ao criar o documento, você deve calcular a data de expiração no lado do cliente ou servidor. No Angular, usamos o objeto Timestamp do @angular/fire/firestore.
import { Injectable, inject } from '@angular/core';
import { Firestore, doc, setDoc, Timestamp } from '@angular/fire/firestore';
@Injectable({ providedIn: 'root' })
export class BingoService {
private firestore = inject(Firestore);
async criarLoteComValidade(id: string, horas: number = 24) {
const loteRef = doc(this.firestore, `lotes/${id}`);
// Cálculo da expiração
const validade = new Date();
validade.setHours(validade.getHours() + horas);
await setDoc(loteRef, {
criadoEm: Timestamp.now(),
expiraEm: Timestamp.fromDate(validade), // O Firestore precisa deste formato
// ...outros dados
});
}
}
4. O “Pulo do Gato”: Configuração no Console Link para o cabeçalho
O TTL não vem ativado por padrão. Ele precisa ser configurado no Google Cloud Console (painel de controle avançado do Firebase).
Acesse o Console do Google Cloud.
Selecione seu projeto e navegue até Firestore > TTL.
Clique em Criar Política.
No Grupo de Coleções, coloque o nome da sua coleção (ex: lotes).
No Campo de carimbo de data/hora, digite o nome exato do campo (ex: expiraEm).
- Lidando com a “Limpeza Preguiçosa” (Lazy Cleanup)
Um detalhe crucial: o Google processa a fila de exclusão do TTL conforme a disponibilidade de recursos. Isso significa que um documento pode expirar às 10:00, mas ser deletado fisicamente apenas às 10:30.
Para garantir que o usuário não veja dados vencidos nesse intervalo, sua consulta no Angular deve sempre filtrar os resultados:
// Consulta segura no componente
import { collection, query, where, Timestamp } from '@angular/fire/firestore';
const q = query(
collection(this.firestore, 'lotes'),
where('expiraEm', '>', Timestamp.now()) // Filtra o que ainda é válido
);
6. Alternativa para o Plano Spark (Gratuito) Link para o cabeçalho
Se o seu projeto não possui uma conta de faturamento vinculada (exigida para ativar APIs de automação no Google Cloud), você pode simular o TTL com uma Limpeza Manual no Admin:
async faxinaManual() {
const q = query(
collection(this.firestore, 'lotes'),
where('expiraEm', '<', Timestamp.now())
);
const snapshot = await getDocs(q);
snapshot.forEach(d => deleteDoc(d.ref));
}
Conclusão Link para o cabeçalho
O TTL é a solução mais elegante para gerenciar o ciclo de vida de dados no Firebase. Ao combinar o campo Timestamp no Angular com a política de TTL no console, você cria uma aplicação auto-sustentável, limpa e econômica.