feat: tambah role editor, workflow post, leaderboard, rekap kehadiran, kategori kas dengan type, seeder lengkap

This commit is contained in:
2026-04-05 06:21:16 +07:00
parent cde63da358
commit 6c23cc8660
40 changed files with 2432 additions and 129 deletions
+52 -3
View File
@@ -5,38 +5,87 @@ namespace Database\Seeders;
use App\Models\Post;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class PostSeeder extends Seeder
{
public function run(): void
{
$author = User::role('ketua')->first() ?? User::first();
$editor = User::role('editor')->first();
$anggota = User::role('anggota')->first();
$ketua = User::role('ketua')->first();
$posts = [
// Published — sudah melalui full workflow
[
'title' => 'Selamat Datang di Website Persegi',
'category' => 'pengumuman',
'content' => '<p>Kami dengan bangga mempersembahkan website resmi organisasi Persegi. Melalui website ini, masyarakat dapat mengikuti perkembangan kegiatan dan informasi terbaru dari organisasi kami.</p>',
'author_id' => $ketua?->id,
'status' => 'published',
'approved_by' => $editor?->id,
'approved_at' => now()->subDays(11),
'reviewed_by' => $editor?->id,
'published_at' => now()->subDays(10),
],
[
'title' => 'Rekrutmen Anggota Baru 2026',
'category' => 'pengumuman',
'content' => '<p>Persegi membuka pendaftaran anggota baru untuk periode 2026. Bagi pemuda Desa Karangdadap yang ingin bergabung, silakan hubungi pengurus melalui kontak yang tersedia.</p><p>Pendaftaran dibuka hingga akhir bulan April 2026.</p>',
'author_id' => $ketua?->id,
'status' => 'published',
'approved_by' => $editor?->id,
'approved_at' => now()->subDays(6),
'reviewed_by' => $editor?->id,
'published_at' => now()->subDays(5),
],
[
'title' => 'Laporan Kegiatan Kerja Bakti Desa',
'category' => 'berita',
'content' => '<p>Kegiatan kerja bakti yang dilaksanakan pada bulan lalu berjalan dengan lancar. Sebanyak 30 anggota turut berpartisipasi dalam membersihkan lingkungan desa.</p><p>Terima kasih kepada seluruh anggota yang telah berkontribusi.</p>',
'author_id' => $anggota?->id,
'status' => 'published',
'approved_by' => $editor?->id,
'approved_at' => now()->subDays(3),
'reviewed_by' => $editor?->id,
'published_at' => now()->subDays(2),
],
// Approved — sudah disetujui editor, belum diterbitkan
[
'title' => 'Jadwal Rapat Bulanan April 2026',
'category' => 'pengumuman',
'content' => '<p>Rapat bulanan akan dilaksanakan pada akhir April 2026. Seluruh anggota diharapkan hadir.</p>',
'author_id' => $anggota?->id,
'status' => 'approved',
'approved_by' => $editor?->id,
'approved_at' => now()->subDay(),
'reviewed_by' => $editor?->id,
'published_at' => null,
],
// Pending — menunggu review editor
[
'title' => 'Kegiatan Sosial Ramadan 2026',
'category' => 'berita',
'content' => '<p>Persegi berencana mengadakan kegiatan sosial berbagi sembako selama bulan Ramadan.</p>',
'author_id' => $anggota?->id,
'status' => 'pending',
'published_at' => null,
],
// Draft — belum diajukan
[
'title' => 'Profil Divisi Olahraga',
'category' => 'umum',
'content' => '<p>Divisi olahraga Persegi aktif mengadakan kegiatan rutin setiap minggu.</p>',
'author_id' => $anggota?->id,
'status' => 'draft',
'published_at' => null,
],
];
foreach ($posts as $data) {
Post::firstOrCreate(
['slug' => \Illuminate\Support\Str::slug($data['title'])],
array_merge($data, ['author_id' => $author->id, 'status' => 'published'])
['slug' => Str::slug($data['title'])],
$data
);
}
}