Skip to main content

Overview

O Invite é o mecanismo de token para dois fluxos:
  • type=MEMBER -> adiciona um usuário ao BKO ou a uma organização via Membership.
  • type=DRIVER -> vincula um usuário como motorista de um permissionário via DriverTransportOperator.
A entidade, o token, o lifecycle e as validações de estado são compartilhados. O que muda é o efeito do aceite e os dados exigidos por cada tipo.

Tipos e escopos

No Backoffice, a seleção de roles para convite interno usa GET /api/v1/bko/roles?type=INTERNAL. Para convite de organização, usa GET /api/v1/bko/roles?assignableToOrganizationId={organizationId}, retornando roles ENVIRONMENT globais e roles ORGANIZATION da organização escolhida.

Origens do Invite

O Invite carrega dois vínculos com User:
  • invitedByUserId — identifica o emissor ou responsável pelo token.
  • invitedUserId — identifica o usuário convidado quando ele já existe; em MEMBER e DRIVER, pode ser resolvido no aceite.

Lifecycle

O Invite não possui campo status. O estado é derivado: acceptedAt -> accepted, rejectedAt -> rejected, revokedAt -> revoked, expiresAt no passado -> expired, senão -> pending. A expiração padrão é de 7 dias.

Capacidades por superfície

As ações de preview, accept e reject são públicas e operam sobre o token. Resend e revoke exigem autenticação; em OPS, também exigem escopo de organização. Cada ação valida se o convite pertence ao tipo esperado e se o token ainda pode ser usado.

Dados do aceite

name e password são obrigatórios em MEMBER e DRIVER, mas name é ignorado quando o User já existe. Para DRIVER, os campos de habilitação são ignorados quando o User já possui um Driver.

Polymorphic Accept

O aceite tem fases compartilhadas seguidas de um branch por type: Quando o Invite tem email, o aceite também marca o email do User como verificado.

Invite Preview

Antes de aceitar, o cliente exibe informações contextuais sobre o Invite. O preview é público e valida se o token ainda pode ser usado antes de retornar dados enriquecidos conforme o tipo. MEMBER:
DRIVER:
requiresLicense indica se o User já possui um Driver. Quando false, o cliente não precisa solicitar dados de habilitação no aceite.

Flow — BKO creates Organization (MEMBER)

Flow — OPS invites colleague (MEMBER)

Flow — Driver invite (DRIVER)

Reject vs. Revoke

Rejeitar e revogar não disparam notificação síncrona. Qualquer efeito colateral deve reagir aos eventos.

Resend

Um Invite pendente pode ser reenviado. O reenvio regenera o token e recalcula expiresAt para mais 7 dias — o link anterior passa a ser inválido — e emite invite.resent. Invites já aceitos ou revogados não podem ser reenviados.

Events

invite.created e invite.resent disparam notificações com o link por WhatsApp e também por email quando email está preenchido.

Validations

On Creation — comum

On Creation — type=MEMBER

On Creation — type=DRIVER

On Acceptance

Effects of Accept

type=MEMBER -> Membership

Membership interna ACTIVE faz o Profile derivar access:bko. Membership ACTIVE em organização faz o Profile derivar access:ops. Um usuário pode acumular múltiplas Memberships na mesma organização, mas vínculos REVOKED não concedem acesso.

type=DRIVER -> Driver (se novo) + DriverTransportOperator

Vínculo ativo de motorista faz o Profile derivar access:driver. Driver não cria Membership — motorista é pessoal operacional, não membro administrativo da organização.