## CC-7 — Lista de participantes, com quem entrou e quem só abriu o convite

**PRD:** `docs/prd/criacao-e-convite.md`

**Como** administrador, **quero** ver quem já entrou no bolão e quem só abriu
o convite, **para** cobrar no grupo exatamente quem falta.

**Prioridade:** Should — resolve a cobrança do admin, mas o bolão funciona
sem: quem entrou já consegue palpitar.

**Critérios de aceite:**

- Dado que sou admin, quando abro os participantes, então vejo quem entrou no
  bolão.
- Dado que alguém abriu o convite e não concluiu a entrada, então ele aparece
  separado de quem entrou.
- Dado que sou participante comum, quando abro os participantes, então vejo
  quem entrou, **mas não** os dados de quem só abriu o convite.
- Dado que o bolão não tem ninguém além de mim, então vejo mensagem útil em
  vez de lista vazia.
- Dado que o bolão tem muitos participantes, então a lista carrega paginada.

**Tasks:**

_Backend_
- ~~`BE-1` Registrar abertura do convite sem entrada concluída~~ —
  **cancelada em 07/08 por decisão do dono.** Guardaria dado de quem **não
  entrou** no bolão, em troca de uma informação de cobrança que o admin já
  resolve pelo grupo. Os Riscos desta story pediam conferir antes de fazer; a
  resposta foi não fazer.
- [x] `BE-2` Endpoint de participantes com estado (entrou / só abriu), paginado (depende de BE-1)
- [x] `BE-3` Autorização: "só abriu o convite" visível apenas ao admin (depende de BE-2)

_Mobile_
- ~~`FE-1` Tela de participantes com as duas listas separadas para admin~~ —
  **cancelada em 07/08**: sem `BE-1` não existe segunda lista. A tela mostra quem
  entrou, com quem saiu marcado e apagado.
- [x] `FE-2` Visão reduzida para participante comum (depende de BE-3)
- [x] `FE-3` Estados: só eu no bolão, carregando, erro com retry

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano como admin e como participante comum, com 1 e com muitos participantes

**Riscos/Dependências:**

- Depende de CC-5.
- **Registrar quem "só abriu o convite" é dado de alguém que não entrou no
  bolão** — vale conferir se isso é desejável antes de implementar BE-1.
- Não confundir com PP-9, que é sobre quem não *palpitou*, não sobre quem não
  *entrou*.

- **06/08:** `FE-1` depende das duas listas separadas (quem entrou × quem só
  abriu o convite), e o rastreio de quem só abriu (`BE-1`) segue **aguardando
  decisão do Igor**. A tela hoje mostra a lista de quem entrou, com quem saiu
  marcado e apagado.

- **06/08 — QA:** plano em `docs/testes/CC-7-plano.md`, execução em
  `docs/testes/CC-7-execucao.md` (**⚠️ 9 de 10**). `QA-2` **fica aberta**:
  `CC-7-10` (separar quem só abriu o convite) está bloqueado por `BE-1`, que
  aguarda decisão do dono.
- **06/08 — defeito corrigido (`CC-7-08`):** a listagem de participantes e as
  duas rotas de ranking aceitavam qualquer `limit`/`offset`. `limit=0` respondia
  **200 com lista vazia** — a tela dizia "ninguém no bolão" e quem lia
  acreditava; `limit=100000` era atendido inteiro. Agora há `src/common/paginacao.ts`
  com teto de 100 e recusa com motivo, aplicado às três rotas paginadas.

- **07/08 — decisão do dono: não rastrear quem só abriu o convite.** `BE-1` e
  `FE-1` canceladas, e com isso `CC-7-10` sai do plano como **cancelado** em vez
  de bloqueado. `QA-2` fecha com os 9 casos restantes verdes.
