Skip to main content

Campos

CampoTipoDescrição
userIdUUIDIdentificador único
googleProviderIdString?ID do provedor Google OAuth
nameStringNome completo do usuário
emailString?Email do usuário (único, opcional)
phoneIsoStringCódigo ISO do país do telefone
phoneDdiStringDDI do telefone
phoneNumberStringNúmero do telefone
phoneVerifiedBooleanIndica se o telefone foi verificado. Default: false
emailVerifiedBooleanIndica se o email foi verificado. Default: false
passwordString?Credencial protegida da senha. Nulo para contas OAuth-only ou ainda pendentes
avatarString?Object key do avatar no storage
statusUserStatusStatus da conta. Default: ACTIVE
createdByUUID?Usuário que criou o registro, quando aplicável
createdAtDateTimeData de criação
updatedByUUID?Usuário que fez a última atualização, quando aplicável
updatedAtDateTimeData da última atualização
deletedByUUID?Usuário que removeu o registro, quando aplicável
deletedAtDateTime?Data de remoção
O par phoneDdi + phoneNumber é único em todo o sistema.

Relacionamentos

  • Has one (optional) Customer (perfil de passageiro)
  • Has one (optional) Driver
  • Relaciona-se com múltiplas UserSession
  • Relaciona-se com múltiplos Membership (vínculo com organizações via roles)
  • Relaciona-se com múltiplos Employee (vínculo operacional com Companies)
  • Relaciona-se com múltiplos OTP
  • Relaciona-se com múltiplos Order (como responsável pela criação — soldBy)
  • Relaciona-se com múltiplos Invite (emitidos e recebidos)

Regras de Negócio

  • O telefone (phoneDdi + phoneNumber) é obrigatório e único — é o identificador primário de login.
  • O email é opcional, mas único quando preenchido. O login por username aceita email ou telefone.
  • password é nulo para usuários autenticados exclusivamente via Google OAuth e para contas PENDING (criadas sem senha, ativadas por Invite).
  • googleProviderId é único quando preenchido.
  • Usuários BLOCKED não podem autenticar nem renovar sessão.
  • Ao bloquear um usuário, sessões ativas devem ser revogadas para interromper a cadeia de acesso.
  • Documento, data de nascimento e endereços de passageiro vivem em Customer, não no User.
  • Claims de acesso como access:ops, access:bko e access:driver são derivados no Profile a partir de Memberships e vínculos operacionais.

Enums

UserStatus

ValorDescrição
PENDINGConta criada sem senha — aguarda ativação por Invite
ACTIVEConta ativa e apta a autenticar
BLOCKEDConta bloqueada e impedida de autenticar ou renovar sessão

Example

{
  "userId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "googleProviderId": null,
  "name": "Mariana Costa",
  "email": "mariana.costa@example.com",
  "phoneIso": "BR",
  "phoneDdi": "55",
  "phoneNumber": "11987654321",
  "phoneVerified": true,
  "emailVerified": true,
  "password": "$protected_password_hash",
  "avatar": "users/0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10/avatar.webp",
  "status": "ACTIVE",
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T12:00:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T12:10:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}