Skip to content
Commit 9e870e7b authored by Igor Matheus's avatar Igor Matheus
Browse files

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: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
parent f783a224
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment