Skip to content

feat(squads): invariante de exclusividade (1 squad ativo) #362

Description

@danielhe4rt

Parent

#342

O que construir

A invariante de exclusividade (1 squad ativo por pessoa/tenant), com defesa em profundidade.

  • Partial unique UNIQUE (tenant_id, user_id) WHERE role IN ('captain','sub_captain','member').
  • Validação amigável na ApplyToSquad/DecideApplication (erro claro antes de bater no banco).
  • ex_member não conta. Para entrar em outro squad, é preciso sair do atual antes.

Critérios de aceite

  • Partial unique aplicado no banco
  • Validação na Action com erro amigável
  • Segunda membership ativa é bloqueada
  • ex_member não conta
  • Teste (inclui tentativa de dupla escrita/corrida)

BDD

# language: pt
Funcionalidade: Exclusividade de um squad ativo
  Cenário: Bloqueio de segundo squad ativo
    Dado um usuário já ativo (member) no squad A
    Quando o capitão do squad B aprova a candidatura dele
    Então a entrada é bloqueada pela exclusividade
    E exige-se que ele saia do squad A antes

  Cenário: Ex-membro pode entrar em outro squad
    Dado um usuário que é ex_member do squad A
    Quando ele é aprovado no squad B
    Então a entrada é permitida

Bloqueada por

Metadata

Metadata

Assignees

No one assigned

    Labels

    difficulty:easy1-2 daysmod:squadsSquad lifecycle, membership and governanceready-for-agentFully specified, ready for an AFK agenttype:featNew feature

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions