feat(sosial-dashboard): tambah API ringkasan pendidikan & beasiswa + CRUD event budaya - bump 0.1.55

- API GET /api/pendidikan/ringkasan/stats: siswa per jenjang, jumlah lembaga & pengajar
- API GET /api/pendidikan/beasiswa/ringkasan/stats: jumlah penerima, dana, tahun ajaran
- Schema + migration: model EventBudaya (nama, tanggal, lokasi, deskripsi)
- API CRUD /api/desa/eventbudaya: create, find-many, findUnique, updt, del
- State admin: eventBudaya.ts (valtio proxy, create/findMany/edit/delete)
- Admin CMS: /admin/desa/event-budaya (list, create, edit)
- Navbar: tambah entry Desa_9 Event Budaya di semua role
- Seeder: 8 event budaya Bali untuk Desa Darmasaba

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-05 15:25:34 +08:00
parent 2497298703
commit ff25ead2df
24 changed files with 1006 additions and 1 deletions

View File

@@ -0,0 +1,30 @@
import prisma from "@/lib/prisma";
import { loadJsonData } from "../../../load-json";
const eventBudayaJson = loadJsonData("desa/event-budaya/event-budaya.json");
export async function seedEventBudaya() {
console.log("🔄 Seeding Event Budaya...");
for (const item of eventBudayaJson) {
await prisma.eventBudaya.upsert({
where: { id: item.id },
update: {
nama: item.nama,
tanggal: new Date(item.tanggal),
lokasi: item.lokasi,
deskripsi: item.deskripsi,
},
create: {
id: item.id,
nama: item.nama,
tanggal: new Date(item.tanggal),
lokasi: item.lokasi,
deskripsi: item.deskripsi,
},
});
console.log(` ✅ Event: ${item.nama}`);
}
console.log("🎉 Event Budaya seed selesai");
}

View File

@@ -0,0 +1,58 @@
[
{
"id": "event-budaya-1",
"nama": "Hari Kesaktian Pancasila",
"tanggal": "2025-10-01T07:00:00.000Z",
"lokasi": "Balai Desa Darmasaba",
"deskripsi": "Peringatan Hari Kesaktian Pancasila diikuti seluruh perangkat desa dan warga Desa Darmasaba dengan upacara bendera dan kegiatan budaya."
},
{
"id": "event-budaya-2",
"nama": "Upacara Ngusaba Desa",
"tanggal": "2025-11-15T08:00:00.000Z",
"lokasi": "Pura Puseh Desa Darmasaba",
"deskripsi": "Upacara adat tahunan Ngusaba Desa sebagai bentuk rasa syukur kepada Ida Sang Hyang Widhi Wasa atas keselamatan dan kemakmuran desa."
},
{
"id": "event-budaya-3",
"nama": "Festival Budaya Desa Darmasaba",
"tanggal": "2026-05-20T09:00:00.000Z",
"lokasi": "Lapangan Desa Darmasaba",
"deskripsi": "Festival tahunan menampilkan kesenian tradisional Bali seperti tari kecak, legong, dan barong oleh sanggar seni dari Desa Darmasaba."
},
{
"id": "event-budaya-4",
"nama": "Perayaan HUT Desa Darmasaba",
"tanggal": "2026-08-17T07:30:00.000Z",
"lokasi": "Balai Desa Darmasaba",
"deskripsi": "Peringatan Hari Ulang Tahun Kemerdekaan Republik Indonesia sekaligus hari jadi Desa Darmasaba dengan berbagai lomba dan pertunjukan budaya."
},
{
"id": "event-budaya-5",
"nama": "Perayaan Galungan dan Kuningan",
"tanggal": "2026-03-04T06:00:00.000Z",
"lokasi": "Seluruh wilayah Desa Darmasaba",
"deskripsi": "Rangkaian perayaan Hari Raya Galungan dan Kuningan sebagai hari kemenangan dharma melawan adharma, dirayakan seluruh umat Hindu di Desa Darmasaba."
},
{
"id": "event-budaya-6",
"nama": "Lomba Ogoh-Ogoh Desa",
"tanggal": "2026-03-18T15:00:00.000Z",
"lokasi": "Lapangan Desa Darmasaba",
"deskripsi": "Lomba pembuatan dan parade ogoh-ogoh antar banjar se-Desa Darmasaba dalam rangka menyambut Hari Raya Nyepi."
},
{
"id": "event-budaya-7",
"nama": "Pementasan Wayang Kulit",
"tanggal": "2026-06-10T19:00:00.000Z",
"lokasi": "Wantilan Desa Darmasaba",
"deskripsi": "Pementasan wayang kulit semalam suntuk oleh dalang dari Desa Darmasaba sebagai bagian dari pelestarian seni budaya Bali."
},
{
"id": "event-budaya-8",
"nama": "Upacara Melaspas Gedung Balai Banjar",
"tanggal": "2026-09-05T08:00:00.000Z",
"lokasi": "Banjar Desa Darmasaba",
"deskripsi": "Upacara Melaspas sebagai ritual penyucian bangunan baru balai banjar agar membawa keselamatan dan kesejahteraan bagi krama banjar."
}
]

View File

@@ -0,0 +1,22 @@
-- DropForeignKey
ALTER TABLE "PasarDesa" DROP CONSTRAINT "PasarDesa_kategoriProdukId_fkey";
-- AlterTable
ALTER TABLE "KategoriProdukUmkm" ALTER COLUMN "updatedAt" DROP DEFAULT;
-- CreateTable
CREATE TABLE "EventBudaya" (
"id" TEXT NOT NULL,
"nama" TEXT NOT NULL,
"tanggal" TIMESTAMP(3) NOT NULL,
"lokasi" TEXT NOT NULL,
"deskripsi" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"isActive" BOOLEAN NOT NULL DEFAULT true,
CONSTRAINT "EventBudaya_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "PasarDesa" ADD CONSTRAINT "PasarDesa_kategoriProdukId_fkey" FOREIGN KEY ("kategoriProdukId") REFERENCES "KategoriProdukUmkm"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@@ -2553,3 +2553,15 @@ model RingkasanKesehatanDesa {
isActive Boolean @default(true)
}
// ========================================= EVENT BUDAYA ========================================= //
model EventBudaya {
id String @id @default(cuid())
nama String
tanggal DateTime
lokasi String
deskripsi String? @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
isActive Boolean @default(true)
}

View File

@@ -3,6 +3,7 @@
import prisma from "@/lib/prisma";
import { seedBerita } from "./_seeder_list/desa/berita/seed_berita";
import { seedKegiatanDesa } from "./_seeder_list/desa/seed_kegiatan_desa";
import { seedEventBudaya } from "./_seeder_list/desa/event-budaya/seed_event_budaya";
import { seedFoto } from "./_seeder_list/desa/gallery/foto/seed_foto";
import { seedVideo } from "./_seeder_list/desa/gallery/video/seed_video";
import { seedLayanan } from "./_seeder_list/desa/layanan/seed_layanan";
@@ -392,6 +393,7 @@ import seedAssets from "./seed_assets";
// ===== SOSIAL DASHBOARD =====
await seedRingkasanKesehatan();
await seedKegiatanDesa();
await seedEventBudaya();
// ===== DESA =====
await seedMusikDesa();