diff --git a/prisma/data/landing-page/desa-anti-korupsi/desaantiKorpusi.json b/prisma/data/landing-page/desa-anti-korupsi/desaantiKorpusi.json new file mode 100644 index 00000000..dfd2f4eb --- /dev/null +++ b/prisma/data/landing-page/desa-anti-korupsi/desaantiKorpusi.json @@ -0,0 +1,128 @@ +[ + { + "id": "cmds9h9ko000pvnberdjnx64b", + "name": "1.1 ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP TENTANG PERENCANAAN, PELAKSANAAN, PENATAUSAHAAN DAN PERTANGGUNG JAWABAN APBDES BESERTA IMPLEMENTASINYA", + "deskripsi": "
ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP TENTANG PERENCANAAN, PELAKSANAAN, PENATAUSAHAAN DAN PERTANGGUNG JAWABAN APBDES BESERTA IMPLEMENTASINYA
", + "kategoriId": "cmds9es2o000ivnbe1o0swrvh", + "fileId": "" + }, + { + "id": "cmds9sjmz000svnbesv2133of", + "name": "1.2 ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP MENGENAI MEKANISME EVALUASI KINERJA PERANGKAT DESA", + "deskripsi": "ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP MENGENAI MEKANISME EVALUASI KINERJA PERANGKAT DESA
", + "kategoriId": "cmds9es2o000ivnbe1o0swrvh", + "fileId": "" + }, + { + "id": "cmds9tcpi000vvnbev3ebtlnt", + "name": "1.3 ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP TENTANG PENGENDALIAN GRATIFIKASI, SUAP DAN KONFLIK KEPENTINGAN", + "deskripsi": "ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP TENTANG PENGENDALIAN GRATIFIKASI, SUAP DAN KONFLIK KEPENTINGAN
", + "kategoriId": "cmds9es2o000ivnbe1o0swrvh", + "fileId": "" + }, + { + "id": "cmds9twvj000yvnbep0pq8dzf", + "name": "1.4 PERJANJIAN KERJA SAMA ANTARA PELAKSANA KEGIATAN ANGGARAN DENGAN PIHAK PENYEDIA, DAN TELAH MELALUI PROSES PENGADAAN BARANG/JASA DI DESA", + "deskripsi": "PERJANJIAN KERJA SAMA ANTARA PELAKSANA KEGIATAN ANGGARAN DENGAN PIHAK PENYEDIA, DAN TELAH MELALUI PROSES PENGADAAN BARANG/JASA DI DESA
", + "kategoriId": "cmds9es2o000ivnbe1o0swrvh", + "fileId": "" + }, + { + "id": "cmds9ugap0011vnbe118yv871", + "name": "1.5 ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP TENTANG PAKTA INTEGRITAS DAN SEJENISNYA", + "deskripsi": "ADANYA PERDES/KEPUTUSAN KEPALA DESA/SOP TENTANG PAKTA INTEGRITAS DAN SEJENISNYA
", + "kategoriId": "cmds9es2o000ivnbe1o0swrvh", + "fileId": "" + }, + { + "id": "cmdsa35310014vnbe6qy6l1rz", + "name": "2.1 ADANYA KEGIATAN PENGAWASAN DAN EVALUASI KINERJA PERANGKAT DESA", + "deskripsi": "ADANYA KEGIATAN PENGAWASAN DAN EVALUASI KINERJA PERANGKAT DESA
", + "kategoriId": "cmds9f2ua000jvnbeksu1sfwm", + "fileId": "" + }, + { + "id": "cmdsa46590017vnbepp3noso1", + "name": "2.2 ADANYA TINDAK LANJUT HASIL PEMBINAAN, PETUNJUK, ARAH, PENGAWASAN, DAN PEMERIKSAAN DARI PEMERINTAH PUSAT/DAERAH", + "deskripsi": "ADANYA TINDAK LANJUT HASIL PEMBINAAN, PETUNJUK, ARAH, PENGAWASAN, DAN PEMERIKSAAN DARI PEMERINTAH PUSAT/DAERAH
", + "kategoriId": "cmds9f2ua000jvnbeksu1sfwm", + "fileId": "" + }, + { + "id": "cmdsa5m7z001avnbe4cvfrcz0", + "name": "2.3 TIDAK ADANYA APARATUR DESA DALAM 3(TIGA) TAHUN TERAKHIR YANG TERJERAT TINDAKAN PIDANA KORUPSI", + "deskripsi": "TIDAK ADANYA APARATUR DESA DALAM 3(TIGA) TAHUN TERAKHIR YANG TERJERAT TINDAKAN PIDANA KORUPSI
", + "kategoriId": "cmds9f2ua000jvnbeksu1sfwm", + "fileId": "" + }, + { + "id": "cmdsa8q5q001dvnbemch8j24x", + "name": "3.1 ADANYA LAYANAN PENGADUAN BAGI MASYARAKAT", + "deskripsi": "ADANYA LAYANAN PENGADUAN BAGI MASYARAKAT
", + "kategoriId": "cmds9fr73000kvnbe6w281dcl", + "fileId": "" + }, + { + "id": "cmdsa9lbi001gvnbequn2ba7m", + "name": "3.2 ADANYA SURVEY KEPUASAN MASYARAKAT (SKM) TERHADAP LAYANAN PEMERINTAH DESA", + "deskripsi": "ADANYA SURVEY KEPUASAN MASYARAKAT (SKM) TERHADAP LAYANAN PEMERINTAH DESA
", + "kategoriId": "cmds9fr73000kvnbe6w281dcl", + "fileId": "" + }, + { + "id": "cmdsaa7aq001jvnbeizh04e67", + "name": "3.3 ADANYA KETERBUKAAN AKSES MASYARAKAT TERHADAP INFORMASI LAYANAN PEMERINTAH DESA (KESEHATAN, PENDIDIKAN, SOSIAL, LINGKUNGAN, TRANTIBUMLINMAS, PEKERJAAN UMUM) PEMBANGUNAN, KEPENDUDUKAN, KEUANGAN, DAN PELAYANAN LAINNYA", + "deskripsi": "ADANYA KETERBUKAAN AKSES MASYARAKAT TERHADAP INFORMASI LAYANAN PEMERINTAH DESA (KESEHATAN, PENDIDIKAN, SOSIAL, LINGKUNGAN, TRANTIBUMLINMAS, PEKERJAAN UMUM) PEMBANGUNAN, KEPENDUDUKAN, KEUANGAN, DAN PELAYANAN LAINNYA
", + "kategoriId": "cmds9fr73000kvnbe6w281dcl", + "fileId": "" + }, + { + "id": "cmdsaaw8d001mvnbek3tfefrk", + "name": "3.4 ADANYA MEDIA INFORMASI TENTANG APBDES DI BALAI DESA DAN/ATAU TEMPAT LAIN YANG MUDAH DIAKSES OLEH MASYARAKAT", + "deskripsi": "ADANYA MEDIA INFORMASI TENTANG APBDES DI BALAI DESA DAN/ATAU TEMPAT LAIN YANG MUDAH DIAKSES OLEH MASYARAKAT
", + "kategoriId": "cmds9fr73000kvnbe6w281dcl", + "fileId": "" + }, + { + "id": "cmdsabhif001pvnbepm06hry6", + "name": "3.5 ADANYA MAKLUMAT PELAYANAN", + "deskripsi": "ADANYA MAKLUMAT PELAYANAN
", + "kategoriId": "cmds9fr73000kvnbe6w281dcl", + "fileId": "" + }, + { + "id": "cmdsag40b001svnbe7krq9khc", + "name": "4.1 ADANYA PARTISIPASI DAN KETERLIBATAN MASYARAKAT DALAM PENYUSUNAN RKP DESA", + "deskripsi": "ADANYA PARTISIPASI DAN KETERLIBATAN MASYARAKAT DALAM PENYUSUNAN RKP DESA
", + "kategoriId": "cmds9g5ow000lvnbel3rkkwrv", + "fileId": "" + }, + { + "id": "cmdsagkaf001vvnbejo26w8sa", + "name": "4.2 ADANYA KESADARAN MASYARAKAT DALAM MENCEGAH TERJADINYA PRAKTIK GRATIFIKASI, SUAP DAN KONFLIK KEPENTINGAN", + "deskripsi": "ADANYA KESADARAN MASYARAKAT DALAM MENCEGAH TERJADINYA PRAKTIK GRATIFIKASI, SUAP DAN KONFLIK KEPENTINGAN
", + "kategoriId": "cmds9g5ow000lvnbel3rkkwrv", + "fileId": "" + }, + { + "id": "cmdsah4qe001yvnbeiy3mwrvb", + "name": "4.3 ADANYA KETERLIBATAN LEMBAGA KEMASYARAKATAN DALAM PELAKSANAAN PEMBANGUNAN DESA", + "deskripsi": "ADANYA KETERLIBATAN LEMBAGA KEMASYARAKATAN DALAM PELAKSANAAN PEMBANGUNAN DESA
", + "kategoriId": "cmds9g5ow000lvnbel3rkkwrv", + "fileId": "" + }, + { + "id": "cmdsak5vn0021vnbemg86aab4", + "name": "5.1 ADANYA BUDAYA LOKAL/HUKUM ADAT YANG MENDORONG UPAYA PENCEGAHAN TINDAK PIDANA KORUPSI", + "deskripsi": "ADANYA BUDAYA LOKAL/HUKUM ADAT YANG MENDORONG UPAYA PENCEGAHAN TINDAK PIDANA KORUPSI
", + "kategoriId": "cmds9govb000mvnbesq8b4y99", + "fileId": "" + }, + { + "id": "cmdsalc800024vnbezgulhgrb", + "name": "5.2 ADANYA TOKOH MASYARAKAT, TOKOH AGAMA, TOKOH ADAT, TOKOH PEMUDA, DAN KAUM PEREMPUAN YANG MENDORONG UPAYA PENCEGAHAN TINDAK PIDANA KORUPSI", + "deskripsi": "ADANYA TOKOH MASYARAKAT, TOKOH AGAMA, TOKOH ADAT, TOKOH PEMUDA, DAN KAUM PEREMPUAN YANG MENDORONG UPAYA PENCEGAHAN TINDAK PIDANA KORUPSI
", + "kategoriId": "cmds9govb000mvnbesq8b4y99", + "fileId": "" + } +] \ No newline at end of file diff --git a/prisma/data/landing-page/desa-anti-korupsi/kategoriDesaAntiJKorupsi.json b/prisma/data/landing-page/desa-anti-korupsi/kategoriDesaAntiJKorupsi.json new file mode 100644 index 00000000..eaed17c4 --- /dev/null +++ b/prisma/data/landing-page/desa-anti-korupsi/kategoriDesaAntiJKorupsi.json @@ -0,0 +1,22 @@ +[ + { + "id": "cmds9es2o000ivnbe1o0swrvh", + "name": "PENGUATAN TATA LAKSANA" + }, + { + "id": "cmds9f2ua000jvnbeksu1sfwm", + "name": "PENGUATAN PENGAWASAN" + }, + { + "id": "cmds9fr73000kvnbe6w281dcl", + "name": "PENGUATAN KUALITAS PELAYANAN PUBLIK" + }, + { + "id": "cmds9g5ow000lvnbel3rkkwrv", + "name": "PENGUATAN PARTISIPASI MASYARAKAT" + }, + { + "id": "cmds9govb000mvnbesq8b4y99", + "name": "KEARIFAN LOKAL" + } +] \ No newline at end of file diff --git a/prisma/data/landing-page/profile.json b/prisma/data/landing-page/profile.json deleted file mode 100644 index 15f6f542..00000000 --- a/prisma/data/landing-page/profile.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "id": "edit", - "name": "I.B Surya Prabhawa Manuaba, S.H., M.H.", - "position": "Perbekel Darmasaba periode 2021-2027" - } - ] - \ No newline at end of file diff --git a/prisma/data/landing-page/profile/mediaSosial.json b/prisma/data/landing-page/profile/mediaSosial.json new file mode 100644 index 00000000..b2361ebd --- /dev/null +++ b/prisma/data/landing-page/profile/mediaSosial.json @@ -0,0 +1,32 @@ +[ + { + "id": "cmds8w2q60002vnbe6i8qhkuo", + "name": "Telephone Desa Darmasaba", + "iconUrl": "081239580000" + }, + { + "id": "cmds8z7u20005vnbegyyvnbk0", + "name": "Email Desa Darmasaba", + "iconUrl": "desadarmasaba@badungkab.go.id" + }, + { + "id": "cmds9023u0008vnbe3oxmhwyf", + "name": "Desa Darmasaba", + "iconUrl": "https://www.youtube.com/channel/UCtPw9WOQO7d2HIKzKgel4Xg" + }, + { + "id": "cmds90oul000bvnbe2bqkptoi", + "name": "Pemerintah Desa Darmasaba", + "iconUrl": "https://www.facebook.com/DarmasabaDesaku" + }, + { + "id": "cmds91i4e000evnbe8gtf1gub", + "name": "ddarmasaba", + "iconUrl": "https://www.instagram.com/ddarmasaba/" + }, + { + "id": "cmds92de5000hvnbemlu6sq5x", + "name": "desa.darmasaba", + "iconUrl": "https://www.tiktok.com/@desa.darmasaba?is_from_webapp=1&sender_device=pc" + } +] diff --git a/prisma/data/landing-page/profile/profile.json b/prisma/data/landing-page/profile/profile.json new file mode 100644 index 00000000..a30af2c7 --- /dev/null +++ b/prisma/data/landing-page/profile/profile.json @@ -0,0 +1,7 @@ +[ + { + "id": "edit", + "name": "I.B Surya Prabhawa Manuaba, S.H., M.H.", + "position": "Perbekel Darmasaba periode 2021-2027" + } +] diff --git a/prisma/data/landing-page/profile/programInovasi.json b/prisma/data/landing-page/profile/programInovasi.json new file mode 100644 index 00000000..d3fe242d --- /dev/null +++ b/prisma/data/landing-page/profile/programInovasi.json @@ -0,0 +1,50 @@ +[ + { + "id": "cmdr7039z0002vn5rttctt9hn", + "name": "Davest", + "description": "Darmasaba Village Festval", + "link": "https://darmasaba.desa.id/berita/55862-rakor-davest-2024" + }, + { + "id": "cmdr755pf0005vn5rp8tyuubw", + "name": "Dmangan", + "description": "Darmasaba Aman Pangan", + "link": "https://darmasaba.desa.id/berita/61452-kader-d-mangan-berhasil-meraih-prestasi-dalam-ajang-lomba-banjar-bali-quis-bbq-tahun-2024" + }, + { + "id": "cmdr76nqk0008vn5rdddvcxnr", + "name": "Bicara Darmasaba", + "description": "Bicara Darmasaba", + "link": "https://darmasaba.desa.id/berita/42506-bicara-darmasaba" + }, + { + "id": "cmdr77vbw000bvn5rvpmoq31s", + "name": "Bares", + "description": "Darmasaba Recycling Stock/Exchange", + "link": "http://darmasaba.desa.id/berita/56722-bares" + }, + { + "id": "cmdr7bxtp000evn5rmy85wihx", + "name": "Sajjana Dharma Raksaka", + "description": "Sajjana Dharma Raksaka", + "link": "https://ppid.badungkab.go.id/storage/dokumen/5RS9dldGkrgzMQq6bKdZsqsVRHI8gffWv4PGfb3r.pdf" + }, + { + "id": "cmdr7dlnk000hvn5r9lur3z35", + "name": "PDKT", + "description": "Perangkat Desa Kuat Teknologi", + "link": "https://darmasaba.desa.id/berita/53752-p-d-k-t" + }, + { + "id": "cmdr7ftob000mvn5rfhgdtg8v", + "name": "GM", + "description": "Galah Melah", + "link": "https://darmasaba.desa.id/berita/52880-galah-melah" + }, + { + "id": "cmdr7glue000pvn5r6onzslju", + "name": "Inovasi Desa Darmasaba", + "description": "Inovasi Desa Darmasaba", + "link": "https://darmasaba.desa.id/produk-lokal-desa" + } +] diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0a549c51..39c55fae 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -132,8 +132,8 @@ model ProgramInovasi { model MediaSosial { id String @id @default(cuid()) name String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? iconUrl String? @db.VarChar(255) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -148,8 +148,8 @@ model DesaAntiKorupsi { deskripsi String @db.Text kategori KategoriDesaAntiKorupsi @relation(fields: [kategoriId], references: [id]) kategoriId String - file FileStorage @relation(fields: [fileId], references: [id]) - fileId String + file FileStorage? @relation(fields: [fileId], references: [id]) + fileId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime @default(now()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 517d12af..b08e2f6e 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,4 +1,7 @@ import prisma from "@/lib/prisma"; +import profilePejabatDesa from "./data/landing-page/profile/profile.json"; +import programInovasi from "./data/landing-page/profile/programInovasi.json"; +import mediaSosial from "./data/landing-page/profile/mediaSosial.json"; import categoryPengumuman from "./data/category-pengumuman.json"; import kategoriBerita from "./data/kategori-berita.json"; import caraMemperolehInformasi from "./data/list-caraMemperolehInformasi.json"; @@ -20,27 +23,82 @@ import kategoriProduk from "./data/ekonomi/pasar-desa/kategori-produk.json"; import hubunganOrganisasi from "./data/ekonomi/struktur-organisasi/hubungan-organisasi.json"; import posisiOrganisasi from "./data/ekonomi/struktur-organisasi/posisi-organisasi.json"; import pegawai from "./data/ekonomi/struktur-organisasi/pegawai.json"; -import detailDataPengangguran from './data/ekonomi/jumlah-pengangguran/detail-data-pengangguran.json'; -import tujuanEdukasiLingkungan from './data/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan.json'; -import materiEdukasiLingkungan from './data/lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan.json'; -import contohEdukasiLingkungan from './data/lingkungan/edukasi-lingkungan/contoh-kegiatan-di-desa-darmasaba.json'; -import nilaiKonservasiAdat from './data/lingkungan/konservasi-adat-bali/nilai-konservasi-adat.json'; -import bentukKonservasiBerdasarkanAdat from './data/lingkungan/konservasi-adat-bali/bentuk-konservasi.json'; -import filosofiTriHita from './data/lingkungan/konservasi-adat-bali/filosofi-tri-hita.json'; -import profilePejabatDesa from './data/landing-page/profile.json'; -import tujuanProgram from './data/pendidikan/program-pendidikan-anak/tujuan-program.json'; -import tujuanProgram2 from './data/pendidikan/pendidikan-non-formal/tujuan-program2.json'; -import programUnggulan from './data/pendidikan/program-pendidikan-anak/program-unggulan.json'; -import tujuanBimbinganBelajarDesa from './data/pendidikan/bimbingan-belajar-desa/tujuan-bimbingan-belajar-desa.json'; -import lokasiJadwalBimbinganBelajarDesa from './data/pendidikan/bimbingan-belajar-desa/lokasi-dan-jadwal.json'; -import fasilitasBimbinganBelajarDesa from './data/pendidikan/bimbingan-belajar-desa/fasilitas-yang-disediakan.json'; -import tempatKegiatan from './data/pendidikan/pendidikan-non-formal/tempat-kegiatan.json'; -import jenisProgramYangDiselenggarakan from './data/pendidikan/pendidikan-non-formal/jenis-program-yang-diselenggarakan.json'; +import detailDataPengangguran from "./data/ekonomi/jumlah-pengangguran/detail-data-pengangguran.json"; +import tujuanEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan.json"; +import materiEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan.json"; +import contohEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/contoh-kegiatan-di-desa-darmasaba.json"; +import nilaiKonservasiAdat from "./data/lingkungan/konservasi-adat-bali/nilai-konservasi-adat.json"; +import bentukKonservasiBerdasarkanAdat from "./data/lingkungan/konservasi-adat-bali/bentuk-konservasi.json"; +import filosofiTriHita from "./data/lingkungan/konservasi-adat-bali/filosofi-tri-hita.json"; +import tujuanProgram from "./data/pendidikan/program-pendidikan-anak/tujuan-program.json"; +import tujuanProgram2 from "./data/pendidikan/pendidikan-non-formal/tujuan-program2.json"; +import programUnggulan from "./data/pendidikan/program-pendidikan-anak/program-unggulan.json"; +import tujuanBimbinganBelajarDesa from "./data/pendidikan/bimbingan-belajar-desa/tujuan-bimbingan-belajar-desa.json"; +import lokasiJadwalBimbinganBelajarDesa from "./data/pendidikan/bimbingan-belajar-desa/lokasi-dan-jadwal.json"; +import fasilitasBimbinganBelajarDesa from "./data/pendidikan/bimbingan-belajar-desa/fasilitas-yang-disediakan.json"; +import tempatKegiatan from "./data/pendidikan/pendidikan-non-formal/tempat-kegiatan.json"; +import jenisProgramYangDiselenggarakan from "./data/pendidikan/pendidikan-non-formal/jenis-program-yang-diselenggarakan.json"; import posisiOrganisasiPPID from "./data/ppid/struktur-ppid/posisi-organisasi-PPID.json"; import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; - (async () => { + // =========== LANDING PAGE =========== + // =========== PROFILE =========== + for (const p of profilePejabatDesa) { + await prisma.pejabatDesa.upsert({ + where: { id: p.id }, + update: { + name: p.name, + position: p.position, + }, + create: { + id: p.id, + name: p.name, + position: p.position, + }, + }); + } + console.log( + "✅ profilePejabatDesa seeded without imageId (editable later via UI)" + ); + + // =========== PROGRAM INOVASI =========== + for (const p of programInovasi) { + await prisma.programInovasi.upsert({ + where: { id: p.id }, + update: { + name: p.name, + description: p.description, + link: p.link, + }, + create: { + id: p.id, + name: p.name, + description: p.description, + link: p.link, + }, + }); + } + console.log("program inovasi success ..."); + + // =========== MEDIA SOSIAL =========== + for (const p of mediaSosial) { + await prisma.mediaSosial.upsert({ + where: { id: p.id }, + update: { + name: p.name, + iconUrl: p.iconUrl, + }, + create: { + id: p.id, + name: p.name, + iconUrl: p.iconUrl, + }, + }); + } + console.log("media sosial success ..."); + + // =========== LAYANAN =========== for (const l of layanan) { await prisma.layanan.upsert({ where: { @@ -134,7 +192,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ profilePerbekel seeded without imageId (editable later via UI)"); + console.log( + "✅ profilePerbekel seeded without imageId (editable later via UI)" + ); for (const l of visiMisiDesa) { await prisma.visiMisiDesa.upsert({ @@ -157,7 +217,7 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; // Flatten the nested array structure for posisiOrganisasiPPID const flattenedPosisiOrganisasiPPID = posisiOrganisasiPPID.flat(); - + for (const p of flattenedPosisiOrganisasiPPID) { await prisma.posisiOrganisasiPPID.upsert({ where: { @@ -182,7 +242,7 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; // Flatten the nested array structure for pegawaiPPID const flattenedPegawaiPPID = pegawaiPPID.flat(); - + for (const p of flattenedPegawaiPPID) { await prisma.pegawaiPPID.upsert({ where: { @@ -252,7 +312,6 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; } console.log("pelayanan penduduk non permanen success ..."); - for (const p of potensi) { await prisma.potensi.upsert({ where: { @@ -422,7 +481,6 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; } console.log("kategori produk success ..."); - for (const p of posisiOrganisasi) { await prisma.posisiOrganisasi.upsert({ where: { @@ -611,7 +669,6 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; console.log("bentuk konservasi berdasarkan adat success ..."); - for (const n of nilaiKonservasiAdat) { await prisma.nilaiKonservasiAdat.upsert({ where: { @@ -631,22 +688,6 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; console.log("nilai konservasi adat success ..."); - for (const p of profilePejabatDesa) { - await prisma.pejabatDesa.upsert({ - where: { id: p.id }, - update: { - name: p.name, - position: p.position, - }, - create: { - id: p.id, - name: p.name, - position: p.position, - }, - }); - } - console.log("✅ profilePejabatDesa seeded without imageId (editable later via UI)"); - for (const t of tujuanProgram) { await prisma.tujuanProgram.upsert({ where: { id: t.id }, @@ -693,7 +734,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ tujuan bimbingan belajar desa seeded (editable later via UI)"); + console.log( + "✅ tujuan bimbingan belajar desa seeded (editable later via UI)" + ); for (const t of lokasiJadwalBimbinganBelajarDesa) { await prisma.lokasiJadwalBimbinganBelajarDesa.upsert({ @@ -709,7 +752,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ lokasi jadwal bimbingan belajar desa seeded (editable later via UI)"); + console.log( + "✅ lokasi jadwal bimbingan belajar desa seeded (editable later via UI)" + ); for (const t of fasilitasBimbinganBelajarDesa) { await prisma.fasilitasBimbinganBelajarDesa.upsert({ @@ -725,7 +770,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ fasilitas bimbingan belajar desa seeded (editable later via UI)"); + console.log( + "✅ fasilitas bimbingan belajar desa seeded (editable later via UI)" + ); for (const t of tujuanProgram2) { await prisma.tujuanPendidikanNonFormal.upsert({ @@ -741,7 +788,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ fasilitas bimbingan belajar desa seeded (editable later via UI)"); + console.log( + "✅ fasilitas bimbingan belajar desa seeded (editable later via UI)" + ); for (const t of tempatKegiatan) { await prisma.tempatKegiatan.upsert({ @@ -757,7 +806,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ fasilitas bimbingan belajar desa seeded (editable later via UI)"); + console.log( + "✅ fasilitas bimbingan belajar desa seeded (editable later via UI)" + ); for (const t of jenisProgramYangDiselenggarakan) { await prisma.jenisProgramYangDiselenggarakan.upsert({ @@ -773,8 +824,9 @@ import pegawaiPPID from "./data/ppid/struktur-ppid/pegawai-PPID.json"; }, }); } - console.log("✅ fasilitas bimbingan belajar desa seeded (editable later via UI)"); - + console.log( + "✅ fasilitas bimbingan belajar desa seeded (editable later via UI)" + ); })() .then(() => prisma.$disconnect()) .catch((e) => { diff --git a/src/app/admin/(dashboard)/_state/landing-page/desa-anti-korupsi.ts b/src/app/admin/(dashboard)/_state/landing-page/desa-anti-korupsi.ts index 6eccb4e7..e3f0dc85 100644 --- a/src/app/admin/(dashboard)/_state/landing-page/desa-anti-korupsi.ts +++ b/src/app/admin/(dashboard)/_state/landing-page/desa-anti-korupsi.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import ApiFetch from "@/lib/api-fetch"; import { Prisma } from "@prisma/client"; import { toast } from "react-toastify"; @@ -54,20 +55,38 @@ const desaAntikorupsi = proxy({ }, }, findMany: { - data: null as Array< - Prisma.DesaAntiKorupsiGetPayload<{ - include: { - file: true; - kategori: true; - }; - }> - > | null, - async load() { - const res = await ApiFetch.api.landingpage.desaantikorupsi[ - "find-many" - ].get(); - if (res.status === 200) { - desaAntikorupsi.findMany.data = res.data?.data ?? []; + data: null as any[] | null, + page: 1, + totalPages: 1, + total: 0, + loading: false, + load: async (page = 1, limit = 10) => { // Change to arrow function + desaAntikorupsi.findMany.loading = true; // Use the full path to access the property + desaAntikorupsi.findMany.page = page; + try { + const res = await ApiFetch.api.landingpage.desaantikorupsi[ + "findMany" + ].get({ + query: { page, limit }, + }); + + if (res.status === 200 && res.data?.success) { + desaAntikorupsi.findMany.data = res.data.data || []; + desaAntikorupsi.findMany.total = res.data.total || 0; + desaAntikorupsi.findMany.totalPages = res.data.totalPages || 1; + } else { + console.error("Failed to load media sosial:", res.data?.message); + desaAntikorupsi.findMany.data = []; + desaAntikorupsi.findMany.total = 0; + desaAntikorupsi.findMany.totalPages = 1; + } + } catch (error) { + console.error("Error loading media sosial:", error); + desaAntikorupsi.findMany.data = []; + desaAntikorupsi.findMany.total = 0; + desaAntikorupsi.findMany.totalPages = 1; + } finally { + desaAntikorupsi.findMany.loading = false; } }, }, @@ -281,14 +300,38 @@ const kategoriDesaAntiKorupsi = proxy({ }, }, findMany: { - data: null as Array<{ - id: string; - name: string; - }> | null, - async load() { - const res = await ApiFetch.api.landingpage.kategoridak["find-many"].get(); - if (res.status === 200) { - kategoriDesaAntiKorupsi.findMany.data = res.data?.data ?? []; + data: null as any[] | null, + page: 1, + totalPages: 1, + total: 0, + loading: false, + load: async (page = 1, limit = 10) => { // Change to arrow function + kategoriDesaAntiKorupsi.findMany.loading = true; // Use the full path to access the property + kategoriDesaAntiKorupsi.findMany.page = page; + try { + const res = await ApiFetch.api.landingpage.kategoridak[ + "findMany" + ].get({ + query: { page, limit }, + }); + + if (res.status === 200 && res.data?.success) { + kategoriDesaAntiKorupsi.findMany.data = res.data.data || []; + kategoriDesaAntiKorupsi.findMany.total = res.data.total || 0; + kategoriDesaAntiKorupsi.findMany.totalPages = res.data.totalPages || 1; + } else { + console.error("Failed to load media sosial:", res.data?.message); + kategoriDesaAntiKorupsi.findMany.data = []; + kategoriDesaAntiKorupsi.findMany.total = 0; + kategoriDesaAntiKorupsi.findMany.totalPages = 1; + } + } catch (error) { + console.error("Error loading media sosial:", error); + kategoriDesaAntiKorupsi.findMany.data = []; + kategoriDesaAntiKorupsi.findMany.total = 0; + kategoriDesaAntiKorupsi.findMany.totalPages = 1; + } finally { + kategoriDesaAntiKorupsi.findMany.loading = false; } }, }, diff --git a/src/app/admin/(dashboard)/_state/landing-page/profile.ts b/src/app/admin/(dashboard)/_state/landing-page/profile.ts index 4088acd9..b6007bd4 100644 --- a/src/app/admin/(dashboard)/_state/landing-page/profile.ts +++ b/src/app/admin/(dashboard)/_state/landing-page/profile.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import ApiFetch from "@/lib/api-fetch"; import { Prisma } from "@prisma/client"; import { toast } from "react-toastify"; @@ -5,10 +6,10 @@ import { proxy } from "valtio"; import { z } from "zod"; const templateProgramInovasi = z.object({ - name: z.string().min(3, "Nama minimal 3 karakter"), - description: z.string().min(3, "Deskripsi minimal 3 karakter"), + name: z.string().min(1, "Nama minimal 1 karakter"), + description: z.string().min(1, "Deskripsi minimal 1 karakter"), imageId: z.string().min(1, "Gambar wajib dipilih"), - link: z.string().min(3, "Link minimal 3 karakter"), + link: z.string().min(1, "Link minimal 1 karakter"), }); type ProgramInovasiForm = Prisma.ProgramInovasiGetPayload<{ @@ -59,15 +60,38 @@ const programInovasi = proxy({ }, }, findMany: { - data: null as - | Prisma.ProgramInovasiGetPayload<{ include: { image: true } }>[] - | null, - async load() { - const res = await ApiFetch.api.landingpage.programinovasi[ - "find-many" - ].get(); - if (res.status === 200) { - programInovasi.findMany.data = res.data?.data ?? []; + data: null as any[] | null, + page: 1, + totalPages: 1, + total: 0, + loading: false, + load: async (page = 1, limit = 10) => { // Change to arrow function + programInovasi.findMany.loading = true; // Use the full path to access the property + programInovasi.findMany.page = page; + try { + const res = await ApiFetch.api.landingpage.programinovasi[ + "findMany" + ].get({ + query: { page, limit }, + }); + + if (res.status === 200 && res.data?.success) { + programInovasi.findMany.data = res.data.data || []; + programInovasi.findMany.total = res.data.total || 0; + programInovasi.findMany.totalPages = res.data.totalPages || 1; + } else { + console.error("Failed to load pegawai:", res.data?.message); + programInovasi.findMany.data = []; + programInovasi.findMany.total = 0; + programInovasi.findMany.totalPages = 1; + } + } catch (error) { + console.error("Error loading pegawai:", error); + programInovasi.findMany.data = []; + programInovasi.findMany.total = 0; + programInovasi.findMany.totalPages = 1; + } finally { + programInovasi.findMany.loading = false; } }, }, @@ -453,13 +477,38 @@ const mediaSosial = proxy({ }, }, findMany: { - data: null as - | Prisma.MediaSosialGetPayload<{ include: { image: true } }>[] - | null, - async load() { - const res = await ApiFetch.api.landingpage.mediasosial["find-many"].get(); - if (res.status === 200) { - mediaSosial.findMany.data = res.data?.data ?? []; + data: null as any[] | null, + page: 1, + totalPages: 1, + total: 0, + loading: false, + load: async (page = 1, limit = 10) => { // Change to arrow function + mediaSosial.findMany.loading = true; // Use the full path to access the property + mediaSosial.findMany.page = page; + try { + const res = await ApiFetch.api.landingpage.mediasosial[ + "findMany" + ].get({ + query: { page, limit }, + }); + + if (res.status === 200 && res.data?.success) { + mediaSosial.findMany.data = res.data.data || []; + mediaSosial.findMany.total = res.data.total || 0; + mediaSosial.findMany.totalPages = res.data.totalPages || 1; + } else { + console.error("Failed to load media sosial:", res.data?.message); + mediaSosial.findMany.data = []; + mediaSosial.findMany.total = 0; + mediaSosial.findMany.totalPages = 1; + } + } catch (error) { + console.error("Error loading media sosial:", error); + mediaSosial.findMany.data = []; + mediaSosial.findMany.total = 0; + mediaSosial.findMany.totalPages = 1; + } finally { + mediaSosial.findMany.loading = false; } }, }, diff --git a/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx b/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx index 880b7057..4ad364e4 100644 --- a/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx @@ -1,10 +1,10 @@ +/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import colors from '@/con/colors'; -import { Box, Button, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr } from '@mantine/core'; -import { useShallowEffect } from '@mantine/hooks'; +import { Box, Button, Center, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr } from '@mantine/core'; import { IconEdit, IconSearch, IconX } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; -import { useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; @@ -34,6 +34,14 @@ function ListKategoriKegiatan({ search }: { search: string }) { const [selectedId, setSelectedId] = useState