SGEProduto · Domínio · Desenvolvimento
Repositório

technical-reference · in-progress

Model — User

Conta autenticável, relações, notificações de senha, autoria no Activity Log e identificação administrável.

Responsabilidade atual

Model autenticável do Laravel. Usa HasFactory, LogsActivity e Notifiable, representa a conta de login e fornece as iniciais para a interface.

ElementoEstado atual
atributos fillablename, cpf, email, password, via #[Fillable].
atributos ocultospassword, remember_token, via #[Hidden].
castscpf → Cast — CpfCast (CpfCast); password → hashed.
initials()Usa Str::initials() e retorna primeira/última inicial quando há mais de uma.
relaçõespersonalData() é um perfil opcional um-para-um; affiliations() retorna os vínculos institucionais; notificações nativas são fornecidas por Notifiable.

Auditoria e e-mail

LogsActivity registra alterações dos campos fillable, exceto password. A mudança de senha gera password_changed sem valor anterior, senha nova ou hash. sendPasswordResetNotification() usa QueuedPasswordReset, enfileirada após o commit e criptografada; recuperação não cria linhas em email_messages ou email_delivery_attempts.

A consulta administrativa do Activity Log inclui uma conta somente quando ela possui vínculos administrativos, e mostra atividades elegíveis da própria conta e dos vínculos relacionados. O histórico de e-mails usa o snapshot do registro afetado em scope_context; não infere autorização pelo e-mail do destinatário nem pelo último vínculo selecionado. Ambas as telas exigem o vínculo ativo e selecionado de Administrador do Sistema.

UserPersonalData registra seus atributos fillable (user_id, dados pessoais/profissionais e address_id) e também emancipation_verified_at, que não é fillable porque representa estado controlado pela aplicação. Esse campo é incluído explicitamente no Activity Log com valores anteriores e novos. id, created_at e updated_at ficam fora do registro. A cobertura é verificada por DatabaseAuditTest.

Delimitação de responsabilidade

users mantém autenticação, CPF e e-mail de login. O Administrador do Sistema pode editar nome, CPF e e-mail pela interface administrativa; a alteração do endereço de login envia avisos ao endereço anterior e ao novo. user_personal_data guarda dados pessoais atuais e campos profissionais opcionais do supervisor em um perfil compartilhado pela conta. Cadastro e login não exigem esse perfil; o supervisor preencherá ou confirmará seus dados profissionais no futuro formulário, com edição autorizada pelo tipo de vínculo.

Checklist

  • Configurar autenticação Eloquent para User.
  • Ocultar senha e remember token.
  • Aplicar cast de senha com hash automático.
  • Aplicar CpfCast no estado atual.
  • Criar relações com Affiliation e UserPersonalData e habilitar notificações nativas do Laravel. A conta não possui relação direta com EmailMessage; seu histórico é separado.
  • Manter CPF em $fillable, docblock e casts de User.
  • Testar conta sem dados pessoais completos.
  • Testar conta com múltiplos vínculos em PostgreSQL.
  • Permitir a administração de nome, CPF e e-mail de login por UserController, preservando as notificações de troca de e-mail e a auditoria sem senha.
  • Testar recuperação enfileirada sem persistir token ou corpo nas tabelas próprias de e-mail.
  • Registrar no Activity Log os campos pessoais e profissionais alterados de UserPersonalData, com valores anteriores/novos e autoria do vínculo ativo.

Relacionamentos