Campos
| Campo | Tipo | Descrição |
|---|---|---|
inviteId | UUID | Identificador único |
invitedByUserId | UUID | Usuário que emitiu ou originou o token |
invitedUserId | UUID? | Usuário convidado ou ativado |
organizationId | UUID? | Organização do convite — ausente em convites internos e ativações de conta |
roleId | UUID? | Role atribuída no aceite — usada apenas por MEMBER |
type | InviteType | Tipo do token (MEMBER, DRIVER ou ACCOUNT_ACTIVATION) |
token | String | Token único usado no link |
email | String? | Email do convidado ou usuário ativado, quando informado |
phoneIso | String | Código ISO do país do telefone (padrão BR) |
phoneDdi | String | DDI do telefone |
phoneNumber | String | Número do telefone |
expiresAt | DateTime | Data de expiração do token |
acceptedAt | DateTime? | Data em que o token foi aceito |
revokedAt | DateTime? | Data de revogação |
rejectedAt | DateTime? | Data de rejeição |
createdBy | UUID? | Usuário que criou o registro, quando aplicável |
updatedBy | UUID? | Usuário que fez a última atualização, quando aplicável |
createdAt | DateTime | Data de criação |
Relacionamentos
- Relaciona-se com User (como
invitedBy— emissor ou responsável pelo token) - Relaciona-se com User (como
invitedUser— usuário convidado ou ativado, opcional) - Relaciona-se com Organization (opcional — apenas convites de organização)
- Relaciona-se com Role (opcional — apenas
type=MEMBER)
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 BackOffice.- preenchido +
type=MEMBERrepresenta convite de membro de organização. - preenchido +
type=DRIVERrepresenta convite de motorista. null+type=ACCOUNT_ACTIVATIONrepresenta ativação de uma conta já criada.
roleIdé obrigatório paraMEMBERe ausente paraDRIVEReACCOUNT_ACTIVATION.invitedUserIdé preenchido no aceite deMEMBEReDRIVER, quando o User é resolvido por telefone/email ou criado. EmACCOUNT_ACTIVATION, ele já referencia a conta que será ativada.- O
typedetermina o efeito do aceite:MEMBER-> concede MembershipACTIVEcom aroleIddo convite. Convites internos usam RoleINTERNAL; convites de organização usam RoleENVIRONMENTouORGANIZATION.DRIVER-> garante Driver e ativa o vínculo DriverCompany. A Company associada vem da relaçãoOrganization -> Companyno momento do aceite. Não concede Membership.ACCOUNT_ACTIVATION-> define a senha da conta referenciada porinvitedUserIde torna o usuário apto a autenticar.
- 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 convitestype=DRIVER, ocompanyIdé resolvido no aceite viaorganizationId -> Company. - O modelo não possui campo
updatedAt.
Enums
InviteType
| Valor | Descrição |
|---|---|
MEMBER | Convite para membro — concede Membership ACTIVE com role |
DRIVER | Convite para motorista — garante Driver e ativa vínculo DriverCompany |
ACCOUNT_ACTIVATION | Token para ativação de conta criada sem senha |
InviteStatus (derivado)
O status é calculado a partir dos timestamps (acceptedAt, revokedAt, rejectedAt, expiresAt).
| Valor | Condição |
|---|---|
ACCEPTED | acceptedAt preenchido |
REVOKED | revokedAt preenchido |
REJECTED | rejectedAt preenchido |
EXPIRED | expiresAt no passado |
PENDING | nenhuma das condições acima |