Skip to content

Registro de Atividades ​

O sistema utiliza o pacote spatie/laravel-activitylog para registrar atividades importantes realizadas pelos usuários. Esses registros permitem auditar, rastrear e monitorar ações executadas dentro do sistema, oferecendo transparência e histórico detalhado de alterações.

⚙️ Como funciona ​

Cada model que precisa registrar atividades deve utilizar a trait App\Traits\HasActivityLog. Essa trait encapsula a configuração padrão do pacote spatie/laravel-activitylog, além de permitir personalizações por meio da classe App\Support\ActivityDetails.

🧩 Estrutura ​

App\Traits\HasActivityLog ​

A trait HasActivityLog adiciona o comportamento de log às models.

Métodos principais ​

MétodoDescrição
activityDetails()Deve ser sobrescrito na model para retornar um objeto configurado de ActivityDetails.

Exemplo de uso na Model ​

php
use App\Traits\HasActivityLog;
use App\Support\ActivityDetails;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasActivityLog;

    public function activityDetails(): ActivityDetails
    {
        return ActivityDetails::make()
            ->label('Produto')
            ->recordTitle('name')
            ->logOnly(['name', 'price'])
            ->customLabels([
                'name' => 'Nome do Produto',
                'price' => 'Preço de Venda',
            ]);
    }
}

🧱 Classe App\Support\ActivityDetails ​

A classe ActivityDetails define como as atividades devem ser registradas e exibidas no sistema.

Principais propriedades ​

PropriedadeTipoDescrição
labelstringNome descritivo do tipo de entidade (ex: “Cliente”, “Produto”). Aparece na coluna “Tipo” do recurso de atividades.
recordTitlestringNome do campo usado para identificar o registro (ex: name, document). Aparece na coluna “Entidade”.
logOnlyCollectionLista de campos monitorados para log de alterações.
customLabelsarrayLabels amigáveis para exibir os nomes dos campos nos logs.
modelModelInstância da model associada.

Métodos mais usados ​

MétodoRetornoDescrição
make(?Model $model = null)ActivityDetailsCria uma nova instância.
label(string $label)ActivityDetailsDefine o nome legível da entidade.
recordTitle(string $recordTitle)ActivityDetailsDefine o atributo usado como título do registro.
logOnly(array/Collection $fields)ActivityDetailsDefine explicitamente quais campos serão registrados.
customLabels(array $labels)ActivityDetailsDefine rótulos personalizados para campos.

🪶 Logando eventos personalizados ​

Além das alterações automáticas de models, é possível registrar eventos manuais no log.

Exemplo ​

php
use App\Enums\ActivityEvent;
use App\Models\User;

$user = User::find(1);

activity()
    ->causedBy($user)
    ->performedOn($user)
    ->setEvent(ActivityEvent::LOGIN->value) // Utilize sempre o enum ActivityEvent
    ->log('Usuário fez login no sistema');

Neste exemplo:

  • causedBy($user) → define quem executou a ação;
  • performedOn($user) → define sobre qual entidade a ação ocorreu;
  • setEvent() → define o tipo de evento (sempre vindo do enum ActivityEvent);
  • log() → registra a descrição legível da ação.

Action Filament ​

Utilize a Action ActivityLink em Edit/View Pages ou como recordAction para redirecionar para a visualização dos logs dessa entidade.

🧠 Boas práticas ​

  • Sempre utilize o enum ActivityEvent para manter consistência nos tipos de eventos.
  • Defina claramente os campos relevantes na função activityDetails().
  • Prefira labels amigáveis com customLabels() para tornar o log mais legível.
  • Use o log manual (activity()->...) para registrar ações que não envolvem alterações diretas de models (ex: login, exportação, aprovação, etc.).