35 lines
889 B
PHP
35 lines
889 B
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\AuditLog;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Http\Request;
|
|
|
|
class AuditLogger
|
|
{
|
|
public function log(
|
|
Request $request,
|
|
string $action,
|
|
?Model $subject = null,
|
|
array $metadata = [],
|
|
?Model $actor = null
|
|
): ?AuditLog {
|
|
try {
|
|
$actorUser = $actor ?? $request->user();
|
|
|
|
return AuditLog::create([
|
|
'user_id' => $actorUser?->id,
|
|
'action' => $action,
|
|
'subject_type' => $subject ? get_class($subject) : null,
|
|
'subject_id' => $subject?->getKey(),
|
|
'metadata' => $metadata ?: null,
|
|
'ip_address' => $request->ip(),
|
|
'user_agent' => $request->userAgent(),
|
|
]);
|
|
} catch (\Throwable) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|