Parent
#341
O que construir
Fundar o módulo de domínio onboarding e o esqueleto da máquina de estados, exercitado pelo tipo mais simples (Welcome).
- Mover o
OnboardingServiceProvider de src/Providers/ para src/ (guideline .ai/02-module-architecture).
- Migrations (via
php artisan make:migration --module=onboarding, colunas Tz): onboardings (tenant_id, user_id, type, status, completed_at, paused_at, timestamps; UNIQUE (tenant_id, user_id, type)) e onboarding_steps (onboarding_id, step_key, status, data jsonb, completed_at, timestamps; UNIQUE (onboarding_id, step_key)).
- Models
Onboarding e OnboardingStep com @property PHPDoc (.ai/04-model-phpdoc-sync), #[Table] e #[UseFactory].
- Enums backed-string:
OnboardingType (Welcome, Squads), OnboardingStatus, OnboardingStepStatus.
- Contrato
OnboardingFlow (steps(), prerequisites(), advance(), isComplete()) e OnboardingType::handler() resolvendo o flow (idioma IdentityProvider::getClient).
WelcomeOnboardingFlow com um único step form.
- Action
StartOnboarding (tenant-scoped) cria a linha onboardings (in_progress) + o step inicial.
Critérios de aceite
BDD
# language: pt
Funcionalidade: Iniciar onboarding Welcome
Cenário: Início cria o estado persistido
Dado um usuário autenticado em um tenant
Quando ele inicia o onboarding do tipo Welcome
Então existe um onboarding do tipo Welcome com status in_progress
E o step "form" é criado com status pending
Cenário: Não duplica onboarding do mesmo tipo
Dado que o usuário já iniciou o onboarding Welcome
Quando ele tenta iniciar o Welcome novamente
Então o onboarding existente é retornado
E nenhuma linha duplicada é criada
Bloqueada por
Nenhuma — pode começar imediatamente.
Parent
#341
O que construir
Fundar o módulo de domínio
onboardinge o esqueleto da máquina de estados, exercitado pelo tipo mais simples (Welcome).OnboardingServiceProviderdesrc/Providers/parasrc/(guideline.ai/02-module-architecture).php artisan make:migration --module=onboarding, colunasTz):onboardings(tenant_id,user_id,type,status,completed_at,paused_at, timestamps;UNIQUE (tenant_id, user_id, type)) eonboarding_steps(onboarding_id,step_key,status,datajsonb,completed_at, timestamps;UNIQUE (onboarding_id, step_key)).OnboardingeOnboardingStepcom@propertyPHPDoc (.ai/04-model-phpdoc-sync),#[Table]e#[UseFactory].OnboardingType(Welcome,Squads),OnboardingStatus,OnboardingStepStatus.OnboardingFlow(steps(),prerequisites(),advance(),isComplete()) eOnboardingType::handler()resolvendo o flow (idiomaIdentityProvider::getClient).WelcomeOnboardingFlowcom um único stepform.StartOnboarding(tenant-scoped) cria a linhaonboardings(in_progress) + o step inicial.Critérios de aceite
src/OnboardingServiceProvider.php--module=onboarding, datasTz, PHPDoc sincronizadoUNIQUE (tenant_id, user_id, type)aplicadoOnboardingType::Welcome->handler()devolveWelcomeOnboardingFlowStartOnboardingcria onboardingin_progress+ stepformpendingBDD
Bloqueada por
Nenhuma — pode começar imediatamente.