Campos
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)
- Relaciona-se com múltiplas TripReview, quando responde ou modera avaliações
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 contasPENDING(criadas sem senha, ativadas por Invite).googleProviderIdé único quando preenchido.- Usuários
BLOCKEDnã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:bkoeaccess:driversão derivados no Profile a partir de Memberships e vínculos operacionais.