Skip to content

feat(squads): squad_applications + ApplyToSquad (gated em APTO) #360

Description

@danielhe4rt

Parent

#342

O que construir

A candidatura a um squad, gated no APTO do onboarding (dependência cross-PRD).

  • Migration squad_applications: status (default pending), message (nullable), decided_by (nullable), decided_at (nullable); INDEX (squad_id, status); partial UNIQUE (squad_id, user_id) WHERE status = 'pending'. Model + enum ApplicationStatus.
  • Action ApplyToSquad: exige o gate de conclusão do onboarding Squads (APTO) — isCompleted(user, tenant, Squads); bloqueia quem não é APTO e direciona ao onboarding; impede candidatura pending duplicada no mesmo squad.

A decisão (aprovar/recusar) é a issue {{S6}}.

Critérios de aceite

  • Migration + PHPDoc + partial unique de pending
  • ApplyToSquad bloqueia quem não é APTO (direciona ao onboarding)
  • Usuário APTO cria application pending
  • Candidatura pending duplicada no mesmo squad é bloqueada
  • Teste (inclui o gate APTO)

BDD

# language: pt
Funcionalidade: Candidatura a um squad existente
  Cenário: Não-APTO é bloqueado
    Dado um usuário que não concluiu o onboarding Squads
    Quando ele tenta se candidatar a um squad
    Então a candidatura é bloqueada e ele é direcionado ao onboarding

  Cenário: APTO cria candidatura
    Dado um usuário APTO sem candidatura pendente nesse squad
    Quando ele se candidata
    Então uma application com status pending é criada

  Cenário: Sem candidatura pendente duplicada
    Dado um usuário com candidatura pending num squad
    Quando ele se candidata novamente ao mesmo squad
    Então a segunda candidatura é bloqueada

Bloqueada por

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions