Pular para o conteúdo principal

Status: Approved · v2 · SPEC-API-CHAMP-001

depends_on: SPEC-DOMAIN-CHAMPIONSHIP-001, SPEC-DOMAIN-PAYMENT-001, SPEC-DOMAIN-MATCH-001

used_by: IS-MVP-07.1, IS-MVP-07.2, IS-MVP-07.3, IS-MVP-07.4, IS-MVP-07.5

API de campeonatos

Criação, publicação paga, edições, regulamento, inscrição, atletas, formato, fixtures, classificação e disciplina.

Princípios e padrões

  • Base path /api/v1; JSON UTF-8; chaves em camelCase.
  • Toda resposta usa ApiResponse<T> com ok, data|error e meta contendo requestId e timestamp.
  • IDs são strings opacas; datas são ISO-8601 UTC; dinheiro é inteiro em centavos com moeda BRL.
  • Listas usam page e pageSize no MVP; default 20, máximo 100; metadados ficam em meta.pagination.
  • Endpoints públicos usam DTOs públicos específicos; entidades internas, memberships, saldos e dados privados nunca vazam.
  • Erros de domínio são estáveis e acionáveis; stack traces e detalhes internos não são retornados.
  • Alterações sensíveis usam Idempotency-Key, confirmação recente quando necessário e audit log.
  • Uploads usam fluxo presigned; o backend valida propósito, MIME, tamanho e ownership antes de confirmar o asset.

Endpoints

MétodoRotaAcessoRequestResponseRegras principais
POST/championshipsAutenticadoCreateChampionshipRequestChampionshipManagementResponseDraft + owner.
PATCH/championships/:idchampionship.editProfileUpdateChampionshipRequestChampionshipManagementResponseEnquanto regras permitem.
POST/championships/:id/publishchampionship.publishPublishChampionshipRequestPaymentResponsePix separado, 30 min.
POST/championships/:id/editionschampionship.manageEditionsCreateEditionRequestEditionResponseDados/janelas.
PUT/championships/:id/editions/:editionId/regulationchampionship.manageRegulationUpsertRegulationRequestRegulationResponseTexto+structured+PDF.
POST/championships/:id/editions/:editionId/registrations/invitechampionship.manageRegistrationsInviteTeamRequestRegistrationResponseInvite.
POST/championships/:id/editions/:editionId/registrations/requestTeam managerRequestRegistrationRequestRegistrationResponseRequest.
POST/championships/:id/editions/:editionId/registrations/:rid/decidechampionship.manageRegistrationsDecideRegistrationRequestRegistrationResponseApprove/reject.
PUT/championships/:id/editions/:editionId/formatchampionship.manageFormatConfigureFormatRequestFormatResponseFormato MVP.
POST/championships/:id/editions/:editionId/phaseschampionship.manageFormatCreatePhaseRequestPhaseResponseGroup/knockout/final.
POST/championships/:id/editions/:editionId/fixtures/generatechampionship.manageFixturesGenerateFixturesRequestFixturePreviewResponsePreview idempotente.
POST/championships/:id/editions/:editionId/fixtures/confirmchampionship.manageFixturesConfirmFixturesRequestFixturesResponseCria matches; datas podem pending.
GET/championships/:id/editions/:editionId/standingsPúblicoStandingsQueryStandingsResponseValidated only.
GET/championships/:id/editions/:editionId/top-scorersPúblicoStatsQueryTopScorersResponsePrivacy/confirmed stats.
PUT/championships/:id/editions/:editionId/disciplinechampionship.manageDisciplineDisciplineRulesRequestDisciplineRulesResponseCartões/suspensão/override policy.

Autenticação e autorização

  • Draft privado para gestão; publicado público.
  • Permission por campeonato, não por time.
  • Times só manipulam sua inscrição/contestação dentro da regra.

Erros de domínio

CódigoHTTPQuando ocorreAção esperada no cliente
CHAMPIONSHIP_NOT_PUBLISHED409Operação pública antes do pagamentoPublicar.
REGISTRATION_WINDOW_CLOSED410Fora da janelaBloquear.
FORMAT_INCOMPATIBLE422Times/fases incompatíveisReconfigurar.
FIXTURE_GENERATION_CONFLICT409Já confirmado/estrutura mudouReabrir preview.
ATHLETE_INELIGIBLE422Regra estruturada falhouExibir motivo.
REGULATION_LOCKED409Alteração após lockCriar versão/retificação conforme policy.

Idempotência e concorrência

  • Publish e fixture confirm obrigatórios.
  • Payment effect publica uma única vez.
  • Fixture generator usa inputHash para detectar mudança.

Auditoria e efeitos colaterais

  • Publication, regulation versions, registration decisions, fixture generation, discipline override e result authority auditados.
  • Notificações para gestores/times.

Exemplos

format

{
"type": "groups_then_knockout",
"groupCount": 2,
"teamsPerGroup": 4,
"advancePerGroup": 2,
"homeAway": false
}

fixturePreview

{
"previewId": "fixture_preview_001",
"inputHash": "sha256:...",
"matches": [
{
"homeTeamId": "team_001",
"awayTeamId": "team_002",
"datePending": true
}
]
}

Mocks

  • Payment fake publica; formatos geram fixtures determinísticos.
  • Empty inscrições e conflicts configuráveis.

Testes obrigatórios

  • Draft/publish expiration.
  • Registration modes/windows.
  • Format validation.
  • Fixture idempotency.
  • Validated standings.
  • Discipline override audit.

Critérios de aceite

  • Todos os formatos MVP representados.
  • Datas podem ser definidas depois.
  • Regulamento público e versionado.

Machine summary

spec: SPEC-API-CHAMP-001
api_group: API de campeonatos
base_path: /api/v1
response_envelope: ApiResponse<T>
ids: string
dates: ISO-8601
money: integer_cents