refactor observers, fix policy, add feature tests

This commit is contained in:
2026-05-07 05:31:22 +07:00
parent f5615038b4
commit 8cb9c0eb96
9 changed files with 216 additions and 36 deletions
+17 -6
View File
@@ -12,25 +12,36 @@ use Illuminate\Support\Facades\Auth;
class ActivityObserver
{
public function updated(Activity $activity): void
public function updating(Activity $activity): bool
{
if ($activity->wasChanged('status')) {
if ($activity->isDirty('status')) {
$old = $activity->getOriginal('status');
$new = $activity->status;
// Validasi workflow: draft→pending, pending→approved/rejected
$allowed = [
'draft' => ['pending'],
'pending' => ['approved', 'rejected'],
];
if (isset($allowed[$old]) && ! in_array($new, $allowed[$old])) {
$validTransition = isset($allowed[$old]) && in_array($new, $allowed[$old]);
if (! $validTransition) {
Notification::make()->title('Transisi tidak diizinkan')
->body("Status tidak bisa diubah dari {$old} ke {$new}.")
->danger()->send();
$activity->status = $old;
return;
return false; // batalkan save
}
}
return true;
}
public function updated(Activity $activity): void
{
if ($activity->wasChanged('status')) {
$old = $activity->getOriginal('status');
$new = $activity->status;
ActivityLog::create([
'user_id' => Auth::id(),