45 lines
No EOL
1.1 KiB
PHP
45 lines
No EOL
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\ActivityLog;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class ActivityLogService
|
|
{
|
|
public function log(
|
|
User $user,
|
|
string $action,
|
|
Model $subject,
|
|
string $description,
|
|
array $properties = []
|
|
): void {
|
|
ActivityLog::create([
|
|
'user_id' => $user->id,
|
|
'action' => $action,
|
|
'model_type' => get_class($subject),
|
|
'model_id' => $subject->id,
|
|
'description' => $description,
|
|
'properties' => $properties,
|
|
]);
|
|
}
|
|
|
|
public function getUserActivities(User $user, int $limit = 10): array
|
|
{
|
|
return ActivityLog::with('subject')
|
|
->where('user_id', $user->id)
|
|
->latest()
|
|
->limit($limit)
|
|
->get()
|
|
->map(fn($log) => [
|
|
'action' => $log->action,
|
|
'description' => $log->description,
|
|
'created_at' => $log->created_at,
|
|
'properties' => $log->properties,
|
|
])
|
|
->toArray();
|
|
}
|
|
}
|