MG-7 (parcial): quem escreve no Firestore
158 casos verdes em 12 arquivos. 26 novos, cobrindo criação, convite, entrada,
saída e papel.
A lacuna apareceu ao ligar o app
MG-2 modelou as coleções e escreveu as rules que protegem cada uma. MG-3 fechou o
palpite, MG-5 apura, MG-6 sincroniza. Faltava o óbvio: ninguém tinha escrito quem
escreve. Não havia como criar bolão, gerar convite, entrar por ele, sair ou trocar
de papel. Não é falha de nenhuma story — é a costura entre elas, e apareceu na
primeira vez que alguém tentou usar o modelo para alguma coisa. As tasks entraram
como BE-1 a BE-4 desta story.
Callable para participação, escrita direta para palpite
Cada operação de participação escreve em mais de um lugar de uma vez (bolão +
vínculo + índice) e depende de dado que o cliente não pode ver: o hash do convite,
os jogos da fonte oficial. Rule não faz transação nem busca na internet. O palpite
ficou de fora de propósito: é o caminho quente, e Function no meio somaria cold
start ao momento em que todo mundo palpita junto.
O índice da tela inicial virou gatilho
Entrada, saída, papel, encerramento e arquivamento são cinco portas para o mesmo
estado. Se cada callable tivesse de lembrar de atualizar o índice, a primeira que
esquecesse sumiria com o bolão da tela inicial de alguém — sem erro, e só
reclamando é que se descobre. A contagem de ativos é recontada, não incrementada:
increment erra em silêncio quando o gatilho roda duas vezes, e o Firestore garante
at-least-once.
MG-7-21 mudou de alvo ao ser escrito
Ele ia verificar "o último admin não sai antes de promover outro" e não há como
montar o cenário: o criador é admin permanente, não sai, não é removido e não é
rebaixado, então sempre sobra um. O caso ficou registrando que a guarda é rede, e
não caminho.
Integridade que o Postgres dava de graça: o calendário é global, então criar bolão
escreve só o jogo que falta (sobrescrever apagaria o placar da sincronização e a
apuração de outro bolão); e a entrada fecha no início do primeiro jogo recalculado
a cada checagem, porque jogo adiado muda o horário e um valor congelado manteria a
entrada fechada por um jogo que não vai mais acontecer.
FE-1 a FE-6 e QA-2 seguem abertas: a camada de dados do app.
Co-Authored-By:
Claude Opus 5 (1M context) <noreply@anthropic.com>
parent
f783a224
Please register or sign in to comment