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. organizationIddiferencia convites de organização dos fluxos sem organização:null+type=MEMBERrepresenta convite interno de BKO.- preenchido +
type=MEMBERrepresenta convite de membro de organização. - preenchido +
type=DRIVERrepresenta convite de motorista.
roleIdé obrigatório paraMEMBERe ausente paraEMPLOYEEeDRIVER.transportOperatorIdé usado emDRIVERpara indicar o permissionário do vínculo DriverTransportOperator.invitedUserIdé preenchido no aceite deMEMBEReDRIVER, quando o User é resolvido por telefone/email ou criado.- O fluxo de criação de Employee só emite Invite
EMPLOYEEquando email e telefone não resolvem um User existente; quando resolvem o mesmo User, o Employee é criado diretamente comoACTIVE. - O
typedetermina o efeito do aceite:MEMBER-> concede MembershipACTIVEcom aroleIddo convite. Convites internos usam RoleINTERNAL; convites de organização usam RoleENVIRONMENTouORGANIZATION.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
companyIdpara motorista. Para convitestype=DRIVER, o aceite usaorganizationIdcomo cooperativa etransportOperatorIdcomo permissionário. - O modelo não possui campo
updatedAt.
Enums
InviteType
InviteStatus (derivado)
O status é calculado a partir dos timestamps (acceptedAt, revokedAt, rejectedAt, expiresAt).