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

MG-7: o resto do backend que o app chama, e um furo do CC-3



188 casos verdes em 14 arquivos. Entraram regras, ciclo de vida, correção manual,
extrato e ranking da rodada — que fecham junto as tasks BE-4, BE-5 e BE-6 de MG-5.
No app entrou só a configuração: SDKs do Firebase e apontamento por --dart-define,
com o emulador em opt-in (esquecer o define num build de release tem de cair no
ambiente de verdade, não num emulador que não existe no aparelho de ninguém).

Um furo do CC-3 que só apareceu ao ligar o app

A rule de MG-2 deixava o admin escrever direto no documento do bolão, e o caso
MG-2-07 afirmava isso como correto. Rule não consegue olhar se já existe palpite
no bolão — ou seja, dava para trocar a tabela de pontos depois do primeiro
palpite, que é exatamente o que a trava existe para impedir. Bastaria esperar os
palpites e ajustar a pontuação para o que o palpite do admin acerta; o sigilo de
PP-7 não cobre isso. A escrita direta no bolão passou a ser negada por inteiro e o
MG-2-07 inverteu. Vale igual para closedAt e archivedAt: encerrar exige não haver
jogo pendente, e encerramento antecipado precisa ficar marcado como tal.

O que não foi portado, e por quê

O encerramento antecipado do NestJS empurrava o kickoffAt dos jogos abertos para
fechar o prazo. Aqui isso seria defeito: o jogo é global e o horário dele vale
para todos os bolões do campeonato. A rule do palpite já recusa bolão encerrado.

A consolidação do aviso virou fusão

PR-7 pede aviso consolidado, e no NestJS isso era um coletor em memória da
sincronização. Esse coletor não existe em Functions: cada jogo corrigido é uma
invocação separada, possivelmente em outra máquina. Aviso de correção não lido e
recente do mesmo bolão passa a receber o jogo novo em vez de virar outro.

A correção manual também deixou de devolver quantos avisos saíram — quem apura é
gatilho, e esperar por ele seria segurar o admin numa tela por um número. Ela
devolve quantos palpites serão reapurados.

Três testes meus, três defeitos meus, nenhum do produto: MG-7-62 esperava pela
categoria do efeito (existe aviso) e não pelo efeito, e Ana já tinha um aviso
antigo; MG-7-63 esperava pelo ponto para depois exigir fusão, mas o ponto é
escrito antes do aviso, então o teste criava a corrida que denunciava; MG-7-64
testava cenário impossível, porque em bolão pequeno toda correção mexe na posição
de todo mundo. E um quarto, de vizinhança: o calendário é global, então dois
arquivos de teste na mesma rodada de BSA disputavam os mesmos jogos — cada um
passou a ter o seu código de campeonato.

Falta a camada de dados do app (FE-1, FE-2, FE-4 a FE-6) e a verificação em
device.

Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
parent 9e870e7b
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