Skip to content

feat(onboarding): cadeia de pré-requisito Welcome => Squads (#351) - #475

Open
cristopherpds wants to merge 1 commit into
he4rt:feat/squadsfrom
cristopherpds:feat/351-onboarding-prerequisite-chain
Open

feat(onboarding): cadeia de pré-requisito Welcome => Squads (#351)#475
cristopherpds wants to merge 1 commit into
he4rt:feat/squadsfrom
cristopherpds:feat/351-onboarding-prerequisite-chain

Conversation

@cristopherpds

Copy link
Copy Markdown
Contributor

Contexto

O onboarding Squads (APTO) não pode ser iniciado por quem ainda não concluiu o onboarding Welcome — essa é a cadeia de pré-requisito inter-tipo prevista no PRD (#341). Até então, SquadsOnboardingFlow::prerequisites() retornava [] (com um TO-DO: #351) e o StartOnboarding não validava nada, permitindo iniciar o Squads sem o Welcome concluído.

Este PR implementa a cadeia: o flow do Squads declara [Welcome] como pré-requisito e o StartOnboarding valida cada pré-requisito através do gate público OnboardingCompletionGate::isCompleted() (#349) antes de qualquer escrita. Quando o pré-requisito não está completed, o início é bloqueado com uma PrerequisiteNotMetException que carrega o tipo bloqueado e o pré-requisito faltante como motivo — nenhum onboarding órfão é persistido.

Alterações

  • src/Flows/SquadsOnboardingFlow.phpprerequisites() passa a retornar [OnboardingType::Welcome].
  • src/Actions/StartOnboarding.php — recebe o OnboardingCompletionGate por injeção e valida os pré-requisitos do flow antes da transação; classe agora é final readonly.
  • src/Exceptions/PrerequisiteNotMetException.phpnova exception com type e prerequisite públicos (o motivo do bloqueio), no mesmo estilo da GateBlockedException.
  • database/factories/OnboardingFactory.php — novo state completed() para os testes.
  • tests/Feature/OnboardingPrerequisiteChainTest.phpnovo teste cobrindo os cenários BDD da issue: Squads sem Welcome é bloqueado com o motivo (inclusive com Welcome apenas in_progress), Welcome concluído destrava o Squads, e Welcome segue sem pré-requisitos.
  • tests/Feature/SquadsOnboardingFlowTest.php — atualizado: prerequisites() agora esperado como [Welcome] e os testes que iniciam Squads concluem o Welcome antes.

Critérios de aceite

  • prerequisites() do Squads = [Welcome]
  • Iniciar Squads sem Welcome concluído é bloqueado com motivo
  • Iniciar Squads com Welcome concluído funciona
  • Teste da cadeia

Plano de Testes

  • Executar make check (Rector, Pint e PHPStan passando)
  • Executar make test — módulo onboarding: 35/35 testes passando
  • Suíte completa: 949/951 — as 2 falhas são em MergeDuplicateDiscordProfilesTest (módulo integration-discord) e pré-existentes: reproduzem de forma idêntica na base feat/squads (8ab4cce0) sem este commit. Este PR toca apenas app-modules/onboarding, sem código compartilhado com esse teste
  • Revisor: conferir que os cenários BDD da issue feat(onboarding): cadeia de pré-requisito (Welcome ⇒ Squads) #351 correspondem aos testes de OnboardingPrerequisiteChainTest"

Issues Relacionadas

Closes #351
Related to #341

SquadsOnboardingFlow::prerequisites() passa a declarar [Welcome] e
StartOnboarding valida os pré-requisitos via OnboardingCompletionGate
antes de qualquer escrita, lançando PrerequisiteNotMetException com o
tipo bloqueado e o pré-requisito faltante como motivo.
@cristopherpds
cristopherpds requested a review from a team August 4, 2026 10:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant