Skip to main content

Campos

Relacionamentos

  • Relaciona-se com User (como invitedBy — emissor ou responsável pelo token)
  • Relaciona-se com User (como invitedUser — usuário convidado, opcional)
  • Relaciona-se com Employee (quando type=EMPLOYEE)
  • Relaciona-se com Organization (opcional — apenas convites de organização)
  • Relaciona-se com Role (opcional — apenas type=MEMBER)
  • Relaciona-se com TransportOperator (opcional — apenas type=DRIVER)

Regras de Negócio

  • O Invite é baseado em token único, com telefone obrigatório (phoneDdi + phoneNumber) e email opcional.
  • Possui data de expiração (expiresAt, padrão 7 dias) — após o vencimento, o token não pode ser aceito.
  • Pode ser revogado (revokedAt) ou rejeitado (rejectedAt) enquanto ainda não foi aceito.
  • organizationId diferencia convites de organização dos fluxos sem organização:
    • null + type=MEMBER representa convite interno de BKO.
    • preenchido + type=MEMBER representa convite de membro de organização.
    • preenchido + type=DRIVER representa convite de motorista.
  • roleId é obrigatório para MEMBER e ausente para EMPLOYEE e DRIVER.
  • transportOperatorId é usado em DRIVER para indicar o permissionário do vínculo DriverTransportOperator.
  • invitedUserId é preenchido no aceite de MEMBER e DRIVER, quando o User é resolvido por telefone/email ou criado.
  • O fluxo de criação de Employee só emite Invite EMPLOYEE quando email e telefone não resolvem um User existente; quando resolvem o mesmo User, o Employee é criado diretamente como ACTIVE.
  • O type determina o efeito do aceite:
    • MEMBER -> concede Membership ACTIVE com a roleId do convite. Convites internos usam Role INTERNAL; convites de organização usam Role ENVIRONMENT ou ORGANIZATION.
    • EMPLOYEE -> cria ou resolve o User, liga o User ao Employee e não concede Membership.
    • DRIVER -> garante Driver e ativa o vínculo DriverTransportOperator. O permissionário associado deve ser informado no fluxo de convite ou resolvido pela operação da cooperativa. Não concede Membership.
  • Claims de acesso não são gravados no Invite. Eles são derivados pelo Profile a partir do resultado do aceite.
  • O Invite não carrega companyId para motorista. Para convites type=DRIVER, o aceite usa organizationId como cooperativa e transportOperatorId como permissionário.
  • O modelo não possui campo updatedAt.

Enums

InviteType

InviteStatus (derivado)

O status é calculado a partir dos timestamps (acceptedAt, revokedAt, rejectedAt, expiresAt).

Example