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:
2026-04-04 06:44:54 +07:00
parent 9c72293476
commit ae0cddc270
16 changed files with 287 additions and 1 deletions
+18
View File
@@ -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,
]);
}
}
}
}
+22
View File
@@ -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,
]);
}
}
}