2.7 KiB
2.7 KiB
Activity Log
All domain write operations are logged through ActivityLogService, which wraps Spatie Laravel Activity Log.
Channel
All events are written to the lunar log channel. Query them with:
use Spatie\Activitylog\Models\Activity;
Activity::on($subject)->get();
Activity::causedBy($staff)->get();
Activity::inLog('lunar')->get();
Usage
Inject ActivityLogService and call the relevant method after each operation:
use App\Services\Logging\ActivityLogService;
public function __construct(private ActivityLogService $activityLog) {}
// Creation
$this->activityLog->created($model, ['name' => $name, 'type' => $type]);
// Update — pass old state and new state separately
$this->activityLog->updated($model, ['name' => $old], ['name' => $new]);
// Deletion
$this->activityLog->deleted($model, ['name' => $model->name, 'reason' => $reason]);
The actor is always resolved from auth('staff')->user() at call time — do not pass it explicitly.
Properties Shape
| Method | properties key |
Contents |
|---|---|---|
created |
attributes |
New state snapshot |
updated |
old + attributes |
Previous state and new state |
deleted |
attributes |
Context at time of deletion (name, reason, etc.) |
failed |
attributes |
Context at time of failure (service, error message, etc.) |
What Gets Logged
Appointments
| Action | Method | Key properties |
|---|---|---|
| Book | created |
staff_id, date, start_time, end_time, customer |
| Cancel | deleted |
date, reason |
| Reassign | updated |
old staff id → new staff id |
| Reschedule | updated |
old date/start_time/end_time → new values |
Customers
| Action | Method | Key properties |
|---|---|---|
| Elorus sync success | updated |
elorus_id, elorus_synced_at |
| Elorus sync failure | failed |
service: elorus, error |
Availability
| Action | Method | Key properties |
|---|---|---|
| Create schedule | created |
name, frequency, type |
| Create one-day schedule | created |
name, type, date |
| Update schedule | updated |
old name/frequency/type → new values |
| Delete schedule | deleted |
name |
Adding New Events
Follow the existing pattern — log immediately after the operation succeeds, before returning:
$record = $this->doSomething();
$this->activityLog->created($record, ['relevant' => 'context']);
return $record;
For updates, capture the old state before mutating:
$old = ['name' => $record->name];
$record->update(['name' => $newName]);
$this->activityLog->updated($record, $old, ['name' => $newName]);