feat: tambah sistem poin anggota (kehadiran +10, artikel +5)
- Model MemberPoint + migration - PostObserver: +5 poin saat artikel dipublish - ActivityObserver: +10 poin saat peserta hadir di kegiatan - MemberPointResource: tampil di grup Organisasi - MemberPointSeeder + update ActivitySeeder dengan pivot status kehadiran - Update PermissionSeeder: anggota bisa lihat poin
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Observers;
|
||||
|
||||
use App\Models\Activity;
|
||||
use App\Models\ActivityLog;
|
||||
use App\Models\MemberPoint;
|
||||
use App\Services\NotificationService;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
@@ -66,4 +67,21 @@ class ActivityObserver
|
||||
'description' => "Kegiatan baru dibuat: {$activity->title}",
|
||||
]);
|
||||
}
|
||||
|
||||
public function pivotAttached(Activity $activity, string $relationName, array $pivotIds, array $pivotIdsAttributes): void
|
||||
{
|
||||
if ($relationName !== 'participants') return;
|
||||
|
||||
foreach ($pivotIdsAttributes as $userId => $attrs) {
|
||||
if (($attrs['status'] ?? 'hadir') === 'hadir') {
|
||||
MemberPoint::create([
|
||||
'user_id' => $userId,
|
||||
'points' => 10,
|
||||
'reason' => "Hadir di kegiatan: {$activity->title}",
|
||||
'source_type' => 'activity',
|
||||
'source_id' => $activity->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Observers;
|
||||
|
||||
use App\Models\MemberPoint;
|
||||
use App\Models\Post;
|
||||
|
||||
class PostObserver
|
||||
{
|
||||
public function updated(Post $post): void
|
||||
{
|
||||
if ($post->wasChanged('status') && $post->status === 'published') {
|
||||
MemberPoint::create([
|
||||
'user_id' => $post->user_id,
|
||||
'points' => 5,
|
||||
'reason' => "Artikel dipublikasi: {$post->title}",
|
||||
'source_type' => 'post',
|
||||
'source_id' => $post->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user