Skip to content

feat(onboarding): fundar módulo + máquina de estados via Welcome (step form) #343

Description

@danielhe4rt

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

  • ServiceProvider em src/OnboardingServiceProvider.php
  • Migrations criadas via artisan com --module=onboarding, datas Tz, PHPDoc sincronizado
  • UNIQUE (tenant_id, user_id, type) aplicado
  • OnboardingType::Welcome->handler() devolve WelcomeOnboardingFlow
  • StartOnboarding cria onboarding in_progress + step form pending
  • Testes cobrindo início e idempotência

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.

Metadata

Metadata

Assignees

Labels

Fields

No fields configured for Feature.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions