Compare commits
2 Commits
nico/21-ja
...
nico/27-ja
| Author | SHA1 | Date | |
|---|---|---|---|
| c2ad515366 | |||
| d9ce4aac6d |
@@ -54,6 +54,7 @@
|
||||
"bun": "^1.2.2",
|
||||
"chart.js": "^4.4.8",
|
||||
"classnames": "^2.5.1",
|
||||
"cli-progress": "^3.12.0",
|
||||
"colors": "^1.4.0",
|
||||
"date-fns": "^4.1.0",
|
||||
"dayjs": "^1.11.13",
|
||||
@@ -104,6 +105,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3",
|
||||
"@types/cli-progress": "^3.11.6",
|
||||
"@types/jsonwebtoken": "^9.0.10",
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
[
|
||||
{
|
||||
"id": "dd92a029-cd7d-4b60-8a3b-dd88e61fe715",
|
||||
"id": "c2760e40-f770-11f0-89ff-719f813f71b3",
|
||||
"nama": "BLT-DD (Bantuan Langsung Tunai Dana Desa)",
|
||||
"icon": "bantuan",
|
||||
"deskripsi": "<p>Program pemberian Bantuan Langsung Tunai yang dibiayai dari Dana Desa untuk meringankan beban ekonomi keluarga miskin/prasejahtera di Desa Darmasaba.</p>",
|
||||
"statistikId": "d59481a3-ff7f-4e52-cd5c-89e143eeb869"
|
||||
"tahun": 2023
|
||||
},
|
||||
{
|
||||
"id": "dd92a029-cd7d-4b60-9b4c-dd88e61fe715",
|
||||
"id": "c7f0f2e0-f770-11f0-89ff-719f813f71b3",
|
||||
"nama": "Penguatan Ketahanan Pangan",
|
||||
"icon": "air",
|
||||
"deskripsi": "<p>Kegiatan pemberdayaan masyarakat dalam ketahanan pangan untuk mendukung ketersediaan pangan keluarga kurang mampu dan meningkatkan kemampuan produksi pangan lokal.</p>",
|
||||
"statistikId": "d59481a3-ff7f-4e52-de6d-89e143eeb869"
|
||||
"tahun": 2024
|
||||
},
|
||||
{
|
||||
"id": "dd92a029-cd7d-4b60-0c5d-dd88e61fe715",
|
||||
"id": "ccda45e0-f770-11f0-89ff-719f813f71b3",
|
||||
"nama": "Peningkatan IKM berbasis E-commerce",
|
||||
"icon": "ekonomi",
|
||||
"deskripsi": "<p>Program peningkatan keterampilan usaha mikro kecil (IKM) termasuk pelatihan branding, pengemasan, dan promosi digital untuk memperkuat ekonomi rumah tangga melalui pemasaran online.</p>",
|
||||
"statistikId": "d59481a3-ff7f-4e52-df7e-89e143eeb869"
|
||||
"tahun": 2025
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[
|
||||
{
|
||||
"id": "d59481a3-ff7f-4e52-cd5c-89e143eeb869",
|
||||
"id": "85d8a150-f770-11f0-89ff-719f813f71b3",
|
||||
"tahun": 2023,
|
||||
"jumlah": 20
|
||||
},
|
||||
{
|
||||
"id": "d59481a3-ff7f-4e52-de6d-89e143eeb869",
|
||||
"id": "993b8d20-f770-11f0-89ff-719f813f71b3",
|
||||
"tahun": 2024,
|
||||
"jumlah": 30
|
||||
},
|
||||
{
|
||||
"id": "d59481a3-ff7f-4e52-df7e-89e143eeb869",
|
||||
"id": "9eb3b2a0-f770-11f0-89ff-719f813f71b3",
|
||||
"tahun": 2025,
|
||||
"jumlah": 20
|
||||
}
|
||||
|
||||
@@ -1144,21 +1144,21 @@
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkccs50d0000vn2mfuk0d9dw",
|
||||
"name": "U7rePDZq5E59z-Eo9tLBe-desktop.webp",
|
||||
"id": "cmkp70z5g0000vnu9b0aieem8",
|
||||
"name": "vwZsaxcoFWDlxG1PW7FC0-desktop.webp",
|
||||
"realName": "tips-keamanan-1.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/U7rePDZq5E59z-Eo9tLBe-desktop.webp",
|
||||
"link": "/api/fileStorage/findUnique/vwZsaxcoFWDlxG1PW7FC0-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkccyh7t0003vn2mjdrqtuu0",
|
||||
"name": "TTur8BttDlAS9UgZVe3M8-desktop.webp",
|
||||
"id": "cmkp71pub0003vnu9ef60huuv",
|
||||
"name": "dSe0xyvNLkP2t2f6iq-Hk-desktop.webp",
|
||||
"realName": "tipskaman.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/TTur8BttDlAS9UgZVe3M8-desktop.webp",
|
||||
"link": "/api/fileStorage/findUnique/dSe0xyvNLkP2t2f6iq-Hk-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
@@ -1224,7 +1224,7 @@
|
||||
"link": "/api/fileStorage/findUnique/uE2QwpbcXyBWxVYqCWQQT-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
{
|
||||
"id": "cmkkx9e38000bvni4azjd3u53",
|
||||
"name": "SQqSobKRg3ShvgPw_H41h-desktop.webp",
|
||||
"realName": "pengaduan1.webp",
|
||||
@@ -1287,7 +1287,7 @@
|
||||
"link": "/api/fileStorage/findUnique/h_Gd0SoeIJVTi_5TWUO-P-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
{
|
||||
"id": "cmkm1zis2000bvnsw85m6wdlf",
|
||||
"name": "qJFWokQLCaO60j0XJU_33-desktop.webp",
|
||||
"realName": "mitrakl1.jpg",
|
||||
@@ -1314,7 +1314,7 @@
|
||||
"link": "/api/fileStorage/findUnique/JFd5C2FoaZcgDQUmvp-AO-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
{
|
||||
"id": "cmkm3b1a2000nvnswb9x48dzk",
|
||||
"name": "JjUDrfqxuEMYSAza-s7A8-desktop.webp",
|
||||
"realName": "desa-digital.jpeg",
|
||||
@@ -1350,7 +1350,7 @@
|
||||
"link": "/api/fileStorage/findUnique/TrbkwnYM5rKZeHlISHCX4-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
{
|
||||
"id": "cmknb59md0000vnmam828iuzt",
|
||||
"name": "YgOX5qAP3O1PHG5XmQXkr-desktop.webp",
|
||||
"realName": "gr-1.jpg",
|
||||
@@ -1376,5 +1376,185 @@
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/iHTVkQZ1VdkMOXLt5qdAd-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhbhxi0000vneamj3din9u",
|
||||
"name": "RnAdv7O0QAFrxkFLAXJSa-desktop.webp",
|
||||
"realName": "buku1.jpeg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/RnAdv7O0QAFrxkFLAXJSa-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhed8x0003vneakx0c7me2",
|
||||
"name": "71eZShq4FYAFLxpLfZB0W-desktop.webp",
|
||||
"realName": "buku2.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/71eZShq4FYAFLxpLfZB0W-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhg1cb0006vneagsxa6t4t",
|
||||
"name": "Uxq3GXPqh7HN9fHmRkr3r-desktop.webp",
|
||||
"realName": "buku3.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/Uxq3GXPqh7HN9fHmRkr3r-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhl6mv0009vneasgix42ud",
|
||||
"name": "W5Fc0uRADNkIY3nZicvQA-desktop.webp",
|
||||
"realName": "buku4.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/W5Fc0uRADNkIY3nZicvQA-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhoa5w000cvneah15n28zq",
|
||||
"name": "mp77Op-MwtPQZnH3so4JY-desktop.webp",
|
||||
"realName": "buku5.jpeg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/mp77Op-MwtPQZnH3so4JY-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhr9lg000fvneai3q8qw0s",
|
||||
"name": "V09ZxN1wOwbSFLQiDK0VQ-desktop.webp",
|
||||
"realName": "buku6.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/V09ZxN1wOwbSFLQiDK0VQ-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqi5knc000ivnea8grp7j06",
|
||||
"name": "Wqp4AyVkGjqRMED9Q5XAs-desktop.webp",
|
||||
"realName": "buku7.webp",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/Wqp4AyVkGjqRMED9Q5XAs-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqi9799000lvneamskmvpq5",
|
||||
"name": "NH4aLc7cVuutdQBCofTC0-desktop.webp",
|
||||
"realName": "buku8.webp",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/NH4aLc7cVuutdQBCofTC0-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqibjj2000ovnea3zmmvdop",
|
||||
"name": "MLrsPrD6oiHsrNP4Lc8J7-desktop.webp",
|
||||
"realName": "buku9.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/MLrsPrD6oiHsrNP4Lc8J7-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqidn7e000rvnea5rl58f2e",
|
||||
"name": "iaIeNdhuxqltqKP7aZncQ-desktop.webp",
|
||||
"realName": "buku10.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/iaIeNdhuxqltqKP7aZncQ-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqifdfs000uvneajss8zswp",
|
||||
"name": "WUDssJ59pTKE_3IuTiZ2s-desktop.webp",
|
||||
"realName": "buku11.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/WUDssJ59pTKE_3IuTiZ2s-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqik7p5000xvnea6krii3vw",
|
||||
"name": "RJH_-4_R_nlP7GVEQeD1M-desktop.webp",
|
||||
"realName": "buku13.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/RJH_-4_R_nlP7GVEQeD1M-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqinnih0010vneakpjb9egl",
|
||||
"name": "9MA-Jx_36uoho2Tg40_G9-desktop.webp",
|
||||
"realName": "buku14.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/9MA-Jx_36uoho2Tg40_G9-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqiqeb60013vnea2ygrq5rs",
|
||||
"name": "dkb7ZWFl28TREVcvH8sWd-desktop.webp",
|
||||
"realName": "buku15.png",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/dkb7ZWFl28TREVcvH8sWd-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqiur960016vnea3werdoey",
|
||||
"name": "nVj3one6CLuWRd04QnsWo-desktop.webp",
|
||||
"realName": "buku16.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/nVj3one6CLuWRd04QnsWo-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqix2go0019vnea8coousvn",
|
||||
"name": "AnB7JO4_6tlPTX3ypOVLi-desktop.webp",
|
||||
"realName": "buku17.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/AnB7JO4_6tlPTX3ypOVLi-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqiytnv001cvnea7o2sv1vt",
|
||||
"name": "sAyoMERxL6JgFfiO22KPb-desktop.webp",
|
||||
"realName": "buku18.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/sAyoMERxL6JgFfiO22KPb-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqj0nn0001fvneaufur3nke",
|
||||
"name": "WeA-JP2Ks_32fv1k529vj-desktop.webp",
|
||||
"realName": "buku18.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/WeA-JP2Ks_32fv1k529vj-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqj37rg001ivneam29fgayr",
|
||||
"name": "pxlHu2kDmIprQqC2PuXaL-desktop.webp",
|
||||
"realName": "buku19.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/pxlHu2kDmIprQqC2PuXaL-desktop.webp",
|
||||
"category": "image"
|
||||
},
|
||||
{
|
||||
"id": "cmkqj5ql6001lvnea6p0afr9f",
|
||||
"name": "G0iELZb2DhQDCCP5OdzJR-desktop.webp",
|
||||
"realName": "buku20.jpg",
|
||||
"path": "uploads/images",
|
||||
"mimeType": "image/webp",
|
||||
"link": "/api/fileStorage/findUnique/G0iELZb2DhQDCCP5OdzJR-desktop.webp",
|
||||
"category": "image"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
[
|
||||
{
|
||||
"id": "cmh48wo9c0006qq09txnxusql",
|
||||
"id": "cmkp70zau0002vnu9o1jtpi1i",
|
||||
"judul": "Keamanan Rumah",
|
||||
"deskripsi": "<p><ul><li><p>Pastikan pintu dan jendela selalu terkunci saat meninggalkan rumah</p></li><li><p>Pasang lampu penerangan di halaman dan area sekitar rumah untuk mencegah tindak kejahatan.</p></li><li><p>Jangan mudah memberikan akses masuk ke orang yang tidak dikenal.</p></li></ul></p>",
|
||||
"imageId": "cmkccs50d0000vn2mfuk0d9dw"
|
||||
"imageId": "cmkp71pub0003vnu9ef60huuv"
|
||||
},
|
||||
{
|
||||
"id": "cmh48wo9c1117rr10txnxusql",
|
||||
"id": "cmkp71pzo0005vnu9p3n9646d",
|
||||
"judul": "Keamanan Lingkungan Tanggungjawab Bersama",
|
||||
"deskripsi": "<p>Pemerintah Desa Darmasaba melaksanakan sosialisasi dan pembinaan tentang keamanan dan ketertiban lingkungan kepada warga Perumahan Darmasaba Permai. Warga diajak berperan aktif dalam menjaga keamanan lingkungan serta mendukung penyediaan lampu penerangan jalan untuk mencegah tindak kriminal dan kecelakaan. Bhabinkamtibmas dan Babinsa turut memberikan materi keamanan dan ketertiban kepada warga, menekankan pentingnya partisipasi masyarakat dalam menjaga keamanan desa.</p>",
|
||||
"imageId": "cmkccyh7t0003vn2mjdrqtuu0"
|
||||
"imageId": "cmkp70z5g0000vnu9b0aieem8"
|
||||
}
|
||||
]
|
||||
22
prisma/data/pendidikan/data-pendidikan/data-pendidikan.json
Normal file
22
prisma/data/pendidikan/data-pendidikan/data-pendidikan.json
Normal file
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"id": "cmkqmqbv30000vn84kf0ogf61",
|
||||
"name": "TK",
|
||||
"jumlah": "120"
|
||||
},
|
||||
{
|
||||
"id": "cmkqmr20h0001vn84jxtuukfk",
|
||||
"name": "SD",
|
||||
"jumlah": "874"
|
||||
},
|
||||
{
|
||||
"id": "cmkqmshcx0002vn84ufnz9mue",
|
||||
"name": "SMP",
|
||||
"jumlah": "50"
|
||||
},
|
||||
{
|
||||
"id": "cmkqmsuoc0003vn84glk1d0rc",
|
||||
"name": "SMA",
|
||||
"jumlah": "862"
|
||||
}
|
||||
]
|
||||
97
prisma/data/pendidikan/info-sekolah/lembaga.json
Normal file
97
prisma/data/pendidikan/info-sekolah/lembaga.json
Normal file
@@ -0,0 +1,97 @@
|
||||
[
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd200",
|
||||
"nama": "TK Widya Kumara",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc301"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd202",
|
||||
"nama": "TK Widya Sari",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc301"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd203",
|
||||
"nama": "TK Kuntala Dewi I",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc301"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd204",
|
||||
"nama": "TK Widya Kumarayasa",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc301"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd205",
|
||||
"nama": "TK Dewi Ganadwati",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc301"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd400",
|
||||
"nama": "SD No. 1 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd300",
|
||||
"nama": "SD No. 2 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd401",
|
||||
"nama": "SD No. 3 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd402",
|
||||
"nama": "SD No. 4 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd403",
|
||||
"nama": "SD No. 5 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd404",
|
||||
"nama": "SD No. 6 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd405",
|
||||
"nama": "SD No. 7 Darmasaba",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc302"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd406",
|
||||
"nama": "SMP Negeri 1 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc303"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd407",
|
||||
"nama": "SMP Negeri 2 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc303"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd408",
|
||||
"nama": "SMP Negeri 3 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc303"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd409",
|
||||
"nama": "SMP Negeri 4 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc303"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd410",
|
||||
"nama": "SMP Negeri 5 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc303"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd411",
|
||||
"nama": "SMA Negeri 1 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc304"
|
||||
},
|
||||
{
|
||||
"id": "cmghqwjs4000404l8c6vwd412",
|
||||
"nama": "SMA Negeri 2 Abiansemal",
|
||||
"jenjangId": "cmghqwjs4000404l8c5uvc304"
|
||||
}
|
||||
]
|
||||
967
prisma/data/pendidikan/info-sekolah/pengajar.json
Normal file
967
prisma/data/pendidikan/info-sekolah/pengajar.json
Normal file
@@ -0,0 +1,967 @@
|
||||
[
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3arm",
|
||||
"nama": "I Kadek Ariyasa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3brm",
|
||||
"nama": "Ni Luh Sinta Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3crm",
|
||||
"nama": "I Made Dharma Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3drm",
|
||||
"nama": "Ni Kadek Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3erm",
|
||||
"nama": "I Komang Aditya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3frm",
|
||||
"nama": "Ni Made Intan Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3grm",
|
||||
"nama": "I Putu Bayu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3hrm",
|
||||
"nama": "Ni Ketut Sri Wahyuni",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3irm",
|
||||
"nama": "I Nyoman Yoga Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "dnkowzpeu000004l7exka3jrm",
|
||||
"nama": "Ni Komang Ratna Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z5r",
|
||||
"nama": "I Made Satria",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z1r",
|
||||
"nama": "Ni Luh Putri Ayu",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z2r",
|
||||
"nama": "I Kadek Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z3r",
|
||||
"nama": "Ni Made Rani Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z4r",
|
||||
"nama": "I Komang Yuda Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z5r",
|
||||
"nama": "Ni Kadek Ayu Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z6r",
|
||||
"nama": "I Putu Ardi Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z7r",
|
||||
"nama": "Ni Ketut Melati",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z8r",
|
||||
"nama": "I Nyoman Agung",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "dnkox31m7000004lagpwk9z9r",
|
||||
"nama": "Ni Komang Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67yy",
|
||||
"nama": "I Made Arya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67zz",
|
||||
"nama": "Ni Luh Putu Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67aa",
|
||||
"nama": "I Komang Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67bb",
|
||||
"nama": "Ni Kadek Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67cc",
|
||||
"nama": "I Putu Gede Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67dd",
|
||||
"nama": "Ni Made Cahya Utami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67ee",
|
||||
"nama": "I Nyoman Aditya Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67ff",
|
||||
"nama": "Ni Komang Ratna Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67gg",
|
||||
"nama": "I Kadek Bima Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "dnkox64cu000104la7mge67hh",
|
||||
"nama": "Ni Putu Ayu Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pag",
|
||||
"nama": "I Made Yoga Wirawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pbg",
|
||||
"nama": "Ni Luh Desi Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pcg",
|
||||
"nama": "I Komang Putra Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pdg",
|
||||
"nama": "Ni Kadek Intan Paramitha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1peg",
|
||||
"nama": "I Putu Adi Wicaksana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pfg",
|
||||
"nama": "Ni Made Ayu Kirana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1phg",
|
||||
"nama": "I Nyoman Bayu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pih",
|
||||
"nama": "Ni Komang Sri Laksmi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pjh",
|
||||
"nama": "I Kadek Rama Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pjk",
|
||||
"nama": "Ni Putu Diah Anggraini",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzg",
|
||||
"nama": "I Made Krisna Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzh",
|
||||
"nama": "Ni Luh Ayu Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzi",
|
||||
"nama": "I Komang Yuda Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzj",
|
||||
"nama": "Ni Kadek Putri Anjani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzk",
|
||||
"nama": "I Putu Surya Adi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzl",
|
||||
"nama": "Ni Made Ayu Cahyani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzm",
|
||||
"nama": "I Nyoman Artha Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzn",
|
||||
"nama": "Ni Komang Sinta Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzo",
|
||||
"nama": "I Kadek Gede Pranaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "dnkox9520000204la1ans1pzp",
|
||||
"nama": "Ni Putu Ratih Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5a",
|
||||
"nama": "I Made Arya Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5b",
|
||||
"nama": "I Nyoman Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5c",
|
||||
"nama": "I Kadek Surya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5d",
|
||||
"nama": "I Komang Aditya Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5e",
|
||||
"nama": "Ni Luh Putri Ayu",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5f",
|
||||
"nama": "Ni Made Intan Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5g",
|
||||
"nama": "I Gede Yoga Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5h",
|
||||
"nama": "Ni Kadek Sri Wahyuni",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5i",
|
||||
"nama": "I Putu Andika Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "dnkoxzl8u000704la0jla6y5j",
|
||||
"nama": "Ni Komang Diah Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq1",
|
||||
"nama": "I Made Bima Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq2",
|
||||
"nama": "I Nyoman Rizky Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq3",
|
||||
"nama": "I Kadek Wahyu Nugraha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq4",
|
||||
"nama": "I Komang Fajar Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq5",
|
||||
"nama": "Ni Luh Sinta Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq6",
|
||||
"nama": "Ni Made Putu Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq7",
|
||||
"nama": "I Gede Arjuna Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq8",
|
||||
"nama": "Ni Kadek Ayu Puspita",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq9",
|
||||
"nama": "I Putu Danu Kresna",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy1mvk000804ladmmq5qq0",
|
||||
"nama": "Ni Komang Ratna Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtda",
|
||||
"nama": "I Made Yoga Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdb",
|
||||
"nama": "I Nyoman Bayu Adnyana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdc",
|
||||
"nama": "I Kadek Rama Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdd",
|
||||
"nama": "I Komang Agus Prabawa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtde",
|
||||
"nama": "Ni Luh Ayu Citra Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdf",
|
||||
"nama": "Ni Made Sari Indrayani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdg",
|
||||
"nama": "I Gede Mahesa Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdh",
|
||||
"nama": "Ni Kadek Purnami Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdi",
|
||||
"nama": "I Putu Arta Gunawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy2m6j000904la2fbthtdj",
|
||||
"nama": "Ni Komang Indah Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpya",
|
||||
"nama": "I Made Arya Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyb",
|
||||
"nama": "I Nyoman Dika Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyc",
|
||||
"nama": "I Kadek Putra Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyd",
|
||||
"nama": "I Komang Agus Setiawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpye",
|
||||
"nama": "Ni Luh Putu Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyf",
|
||||
"nama": "Ni Kadek Ayu Puspita",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyg",
|
||||
"nama": "I Putu Yoga Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyh",
|
||||
"nama": "Ni Komang Dwi Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyi",
|
||||
"nama": "I Made Bayu Kurniawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy5cs5000a04la9jlcbpyj",
|
||||
"nama": "Ni Putu Ayu Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60ua",
|
||||
"nama": "I Made Dewa Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60ub",
|
||||
"nama": "I Nyoman Surya Adnyana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60uc",
|
||||
"nama": "I Kadek Bima Santosa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60ud",
|
||||
"nama": "I Komang Arta Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60ue",
|
||||
"nama": "Ni Luh Made Pertiwi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60uf",
|
||||
"nama": "Ni Kadek Citra Laksmi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60ug",
|
||||
"nama": "I Putu Rangga Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60uh",
|
||||
"nama": "Ni Komang Rina Apriyani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60ui",
|
||||
"nama": "I Made Aditya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy6dtp000b04la1zlo60uj",
|
||||
"nama": "Ni Putu Ayu Cahyaningrum",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcaa",
|
||||
"nama": "I Made Krisna Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcab",
|
||||
"nama": "I Nyoman Gede Putrawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcac",
|
||||
"nama": "I Kadek Yoga Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcad",
|
||||
"nama": "I Komang Danu Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcae",
|
||||
"nama": "Ni Luh Ayu Sinta Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcaf",
|
||||
"nama": "Ni Kadek Intan Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcag",
|
||||
"nama": "I Putu Wira Gunawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcah",
|
||||
"nama": "Ni Komang Ayu Ratnasari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcai",
|
||||
"nama": "I Made Fajar Nugraha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy76ux000c04lags2adcaj",
|
||||
"nama": "Ni Putu Desi Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn1",
|
||||
"nama": "I Made Arya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn2",
|
||||
"nama": "I Nyoman Surya Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn3",
|
||||
"nama": "I Komang Aditya Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn4",
|
||||
"nama": "I Putu Gede Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn5",
|
||||
"nama": "Ni Luh Putri Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn6",
|
||||
"nama": "Ni Kadek Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn7",
|
||||
"nama": "I Made Yoga Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn8",
|
||||
"nama": "I Nyoman Wira Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn9",
|
||||
"nama": "Ni Komang Diah Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy85nz000d04lahr5hepn0",
|
||||
"nama": "I Putu Bayu Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390na",
|
||||
"nama": "I Made Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390nb",
|
||||
"nama": "I Nyoman Agus Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390nc",
|
||||
"nama": "I Komang Yuda Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390nd",
|
||||
"nama": "I Putu Gede Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390ne",
|
||||
"nama": "Ni Luh Desi Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390nf",
|
||||
"nama": "Ni Kadek Ayu Prameswari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390ng",
|
||||
"nama": "I Made Rizky Ananta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390nh",
|
||||
"nama": "I Nyoman Dika Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390ni",
|
||||
"nama": "Ni Komang Puspita Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy91wc000e04la966390nj",
|
||||
"nama": "I Putu Andika Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi1",
|
||||
"nama": "I Made Wahyu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi2",
|
||||
"nama": "I Nyoman Kevin Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi3",
|
||||
"nama": "I Komang Arta Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi4",
|
||||
"nama": "I Putu Gede Satya Wibawa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi5",
|
||||
"nama": "Ni Luh Ayu Citra Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi6",
|
||||
"nama": "Ni Kadek Putri Anggraini",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi7",
|
||||
"nama": "I Made Fajar Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi8",
|
||||
"nama": "I Nyoman Rama Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi9",
|
||||
"nama": "Ni Komang Sinta Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoy9zzy000f04la7rze3fi0",
|
||||
"nama": "I Putu Dimas Pradipta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wya",
|
||||
"nama": "I Made Arya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyb",
|
||||
"nama": "I Nyoman Adi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyc",
|
||||
"nama": "I Wayan Putra Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyd",
|
||||
"nama": "Ni Kadek Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyf",
|
||||
"nama": "I Komang Yoga Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyg",
|
||||
"nama": "Ni Luh Putu Anggreni",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyh",
|
||||
"nama": "I Made Dewa Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyi",
|
||||
"nama": "Ni Putu Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyj",
|
||||
"nama": "I Nyoman Agus Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyapqt000g04laaob10wyk",
|
||||
"nama": "Ni Komang Ratih Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc1",
|
||||
"nama": "I Wayan Surya Dharma",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc2",
|
||||
"nama": "Ni Kadek Ayu Prameswari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc3",
|
||||
"nama": "I Made Gede Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc4",
|
||||
"nama": "I Nyoman Krisna Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc5",
|
||||
"nama": "Ni Luh Desi Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc6",
|
||||
"nama": "I Komang Bima Santosa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc7",
|
||||
"nama": "Ni Putu Cahya Utami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc8",
|
||||
"nama": "I Wayan Dimas Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc9",
|
||||
"nama": "Ni Kadek Purnama Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "dnkoybh2p000h04lahbds4wc0",
|
||||
"nama": "I Made Yoga Kencana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1a",
|
||||
"nama": "I Nyoman Gede Sapta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1b",
|
||||
"nama": "Ni Luh Ayu Pertiwi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1c",
|
||||
"nama": "I Wayan Danu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1d",
|
||||
"nama": "Ni Kadek Melati Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1e",
|
||||
"nama": "I Made Raka Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1f",
|
||||
"nama": "Ni Komang Sinta Laksmi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1g",
|
||||
"nama": "I Nyoman Arta Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1h",
|
||||
"nama": "Ni Putu Indah Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1i",
|
||||
"nama": "I Wayan Bagus Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoyc6ij000i04la3r8i7f1j",
|
||||
"nama": "Ni Kadek Ayu Wulandari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9ba",
|
||||
"nama": "I Made Arya Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bb",
|
||||
"nama": "I Komang Adi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bc",
|
||||
"nama": "I Nyoman Dewa Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bd",
|
||||
"nama": "I Ketut Agus Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9be",
|
||||
"nama": "Ni Luh Putu Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bf",
|
||||
"nama": "Ni Kadek Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bg",
|
||||
"nama": "I Made Surya Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bh",
|
||||
"nama": "I Komang Yoga Pradipta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bi",
|
||||
"nama": "Ni Putu Citra Wulandari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "dnkoycyfl000j04la757zg9bj",
|
||||
"nama": "I Nyoman Bayu Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfa",
|
||||
"nama": "I Made Gede Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfb",
|
||||
"nama": "I Komang Krisna Yudha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfc",
|
||||
"nama": "I Nyoman Putra Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfd",
|
||||
"nama": "I Ketut Wira Adnyana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfe",
|
||||
"nama": "Ni Luh Kadek Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbff",
|
||||
"nama": "Ni Made Ayu Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfg",
|
||||
"nama": "I Putu Yoga Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfh",
|
||||
"nama": "I Komang Dimas Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfi",
|
||||
"nama": "Ni Kadek Sinta Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "dnkoydnnl000k04lae6jvhbfj",
|
||||
"nama": "I Nyoman Arta Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
}
|
||||
]
|
||||
967
prisma/data/pendidikan/info-sekolah/siswa.json
Normal file
967
prisma/data/pendidikan/info-sekolah/siswa.json
Normal file
@@ -0,0 +1,967 @@
|
||||
[
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3arm",
|
||||
"nama": "I Kadek Ariyasa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3brm",
|
||||
"nama": "Ni Luh Sinta Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3crm",
|
||||
"nama": "I Made Dharma Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3drm",
|
||||
"nama": "Ni Kadek Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3erm",
|
||||
"nama": "I Komang Aditya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3frm",
|
||||
"nama": "Ni Made Intan Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3grm",
|
||||
"nama": "I Putu Bayu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3hrm",
|
||||
"nama": "Ni Ketut Sri Wahyuni",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3irm",
|
||||
"nama": "I Nyoman Yoga Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
{
|
||||
"id": "cmkowzpeu000004l7exka3jrm",
|
||||
"nama": "Ni Komang Ratna Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd200"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z5r",
|
||||
"nama": "I Made Satria",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z1r",
|
||||
"nama": "Ni Luh Putri Ayu",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z2r",
|
||||
"nama": "I Kadek Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z3r",
|
||||
"nama": "Ni Made Rani Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z4r",
|
||||
"nama": "I Komang Yuda Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z5r",
|
||||
"nama": "Ni Kadek Ayu Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z6r",
|
||||
"nama": "I Putu Ardi Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z7r",
|
||||
"nama": "Ni Ketut Melati",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z8r",
|
||||
"nama": "I Nyoman Agung",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
{
|
||||
"id": "cmkox31m7000004lagpwk9z9r",
|
||||
"nama": "Ni Komang Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd202"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67yy",
|
||||
"nama": "I Made Arya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67zz",
|
||||
"nama": "Ni Luh Putu Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67aa",
|
||||
"nama": "I Komang Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67bb",
|
||||
"nama": "Ni Kadek Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67cc",
|
||||
"nama": "I Putu Gede Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67dd",
|
||||
"nama": "Ni Made Cahya Utami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67ee",
|
||||
"nama": "I Nyoman Aditya Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67ff",
|
||||
"nama": "Ni Komang Ratna Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67gg",
|
||||
"nama": "I Kadek Bima Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
{
|
||||
"id": "cmkox64cu000104la7mge67hh",
|
||||
"nama": "Ni Putu Ayu Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd203"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pag",
|
||||
"nama": "I Made Yoga Wirawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pbg",
|
||||
"nama": "Ni Luh Desi Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pcg",
|
||||
"nama": "I Komang Putra Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pdg",
|
||||
"nama": "Ni Kadek Intan Paramitha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1peg",
|
||||
"nama": "I Putu Adi Wicaksana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pfg",
|
||||
"nama": "Ni Made Ayu Kirana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1phg",
|
||||
"nama": "I Nyoman Bayu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pih",
|
||||
"nama": "Ni Komang Sri Laksmi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pjh",
|
||||
"nama": "I Kadek Rama Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pjk",
|
||||
"nama": "Ni Putu Diah Anggraini",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd204"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzg",
|
||||
"nama": "I Made Krisna Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzh",
|
||||
"nama": "Ni Luh Ayu Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzi",
|
||||
"nama": "I Komang Yuda Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzj",
|
||||
"nama": "Ni Kadek Putri Anjani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzk",
|
||||
"nama": "I Putu Surya Adi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzl",
|
||||
"nama": "Ni Made Ayu Cahyani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzm",
|
||||
"nama": "I Nyoman Artha Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzn",
|
||||
"nama": "Ni Komang Sinta Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzo",
|
||||
"nama": "I Kadek Gede Pranaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
{
|
||||
"id": "cmkox9520000204la1ans1pzp",
|
||||
"nama": "Ni Putu Ratih Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd205"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5a",
|
||||
"nama": "I Made Arya Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5b",
|
||||
"nama": "I Nyoman Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5c",
|
||||
"nama": "I Kadek Surya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5d",
|
||||
"nama": "I Komang Aditya Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5e",
|
||||
"nama": "Ni Luh Putri Ayu",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5f",
|
||||
"nama": "Ni Made Intan Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5g",
|
||||
"nama": "I Gede Yoga Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5h",
|
||||
"nama": "Ni Kadek Sri Wahyuni",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5i",
|
||||
"nama": "I Putu Andika Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
{
|
||||
"id": "cmkoxzl8u000704la0jla6y5j",
|
||||
"nama": "Ni Komang Diah Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd400"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq1",
|
||||
"nama": "I Made Bima Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq2",
|
||||
"nama": "I Nyoman Rizky Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq3",
|
||||
"nama": "I Kadek Wahyu Nugraha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq4",
|
||||
"nama": "I Komang Fajar Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq5",
|
||||
"nama": "Ni Luh Sinta Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq6",
|
||||
"nama": "Ni Made Putu Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq7",
|
||||
"nama": "I Gede Arjuna Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq8",
|
||||
"nama": "Ni Kadek Ayu Puspita",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq9",
|
||||
"nama": "I Putu Danu Kresna",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy1mvk000804ladmmq5qq0",
|
||||
"nama": "Ni Komang Ratna Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd300"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtda",
|
||||
"nama": "I Made Yoga Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdb",
|
||||
"nama": "I Nyoman Bayu Adnyana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdc",
|
||||
"nama": "I Kadek Rama Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdd",
|
||||
"nama": "I Komang Agus Prabawa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtde",
|
||||
"nama": "Ni Luh Ayu Citra Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdf",
|
||||
"nama": "Ni Made Sari Indrayani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdg",
|
||||
"nama": "I Gede Mahesa Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdh",
|
||||
"nama": "Ni Kadek Purnami Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdi",
|
||||
"nama": "I Putu Arta Gunawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy2m6j000904la2fbthtdj",
|
||||
"nama": "Ni Komang Indah Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd401"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpya",
|
||||
"nama": "I Made Arya Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyb",
|
||||
"nama": "I Nyoman Dika Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyc",
|
||||
"nama": "I Kadek Putra Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyd",
|
||||
"nama": "I Komang Agus Setiawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpye",
|
||||
"nama": "Ni Luh Putu Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyf",
|
||||
"nama": "Ni Kadek Ayu Puspita",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyg",
|
||||
"nama": "I Putu Yoga Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyh",
|
||||
"nama": "Ni Komang Dwi Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyi",
|
||||
"nama": "I Made Bayu Kurniawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy5cs5000a04la9jlcbpyj",
|
||||
"nama": "Ni Putu Ayu Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd402"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60ua",
|
||||
"nama": "I Made Dewa Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60ub",
|
||||
"nama": "I Nyoman Surya Adnyana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60uc",
|
||||
"nama": "I Kadek Bima Santosa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60ud",
|
||||
"nama": "I Komang Arta Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60ue",
|
||||
"nama": "Ni Luh Made Pertiwi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60uf",
|
||||
"nama": "Ni Kadek Citra Laksmi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60ug",
|
||||
"nama": "I Putu Rangga Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60uh",
|
||||
"nama": "Ni Komang Rina Apriyani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60ui",
|
||||
"nama": "I Made Aditya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy6dtp000b04la1zlo60uj",
|
||||
"nama": "Ni Putu Ayu Cahyaningrum",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd403"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcaa",
|
||||
"nama": "I Made Krisna Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcab",
|
||||
"nama": "I Nyoman Gede Putrawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcac",
|
||||
"nama": "I Kadek Yoga Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcad",
|
||||
"nama": "I Komang Danu Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcae",
|
||||
"nama": "Ni Luh Ayu Sinta Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcaf",
|
||||
"nama": "Ni Kadek Intan Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcag",
|
||||
"nama": "I Putu Wira Gunawan",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcah",
|
||||
"nama": "Ni Komang Ayu Ratnasari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcai",
|
||||
"nama": "I Made Fajar Nugraha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy76ux000c04lags2adcaj",
|
||||
"nama": "Ni Putu Desi Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd404"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn1",
|
||||
"nama": "I Made Arya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn2",
|
||||
"nama": "I Nyoman Surya Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn3",
|
||||
"nama": "I Komang Aditya Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn4",
|
||||
"nama": "I Putu Gede Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn5",
|
||||
"nama": "Ni Luh Putri Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn6",
|
||||
"nama": "Ni Kadek Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn7",
|
||||
"nama": "I Made Yoga Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn8",
|
||||
"nama": "I Nyoman Wira Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn9",
|
||||
"nama": "Ni Komang Diah Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy85nz000d04lahr5hepn0",
|
||||
"nama": "I Putu Bayu Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd405"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390na",
|
||||
"nama": "I Made Dwi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390nb",
|
||||
"nama": "I Nyoman Agus Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390nc",
|
||||
"nama": "I Komang Yuda Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390nd",
|
||||
"nama": "I Putu Gede Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390ne",
|
||||
"nama": "Ni Luh Desi Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390nf",
|
||||
"nama": "Ni Kadek Ayu Prameswari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390ng",
|
||||
"nama": "I Made Rizky Ananta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390nh",
|
||||
"nama": "I Nyoman Dika Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390ni",
|
||||
"nama": "Ni Komang Puspita Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy91wc000e04la966390nj",
|
||||
"nama": "I Putu Andika Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd406"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi1",
|
||||
"nama": "I Made Wahyu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi2",
|
||||
"nama": "I Nyoman Kevin Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi3",
|
||||
"nama": "I Komang Arta Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi4",
|
||||
"nama": "I Putu Gede Satya Wibawa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi5",
|
||||
"nama": "Ni Luh Ayu Citra Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi6",
|
||||
"nama": "Ni Kadek Putri Anggraini",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi7",
|
||||
"nama": "I Made Fajar Pranata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi8",
|
||||
"nama": "I Nyoman Rama Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi9",
|
||||
"nama": "Ni Komang Sinta Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoy9zzy000f04la7rze3fi0",
|
||||
"nama": "I Putu Dimas Pradipta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd407"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wya",
|
||||
"nama": "I Made Arya Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyb",
|
||||
"nama": "I Nyoman Adi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyc",
|
||||
"nama": "I Wayan Putra Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyd",
|
||||
"nama": "Ni Kadek Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyf",
|
||||
"nama": "I Komang Yoga Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyg",
|
||||
"nama": "Ni Luh Putu Anggreni",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyh",
|
||||
"nama": "I Made Dewa Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyi",
|
||||
"nama": "Ni Putu Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyj",
|
||||
"nama": "I Nyoman Agus Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyapqt000g04laaob10wyk",
|
||||
"nama": "Ni Komang Ratih Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd408"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc1",
|
||||
"nama": "I Wayan Surya Dharma",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc2",
|
||||
"nama": "Ni Kadek Ayu Prameswari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc3",
|
||||
"nama": "I Made Gede Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc4",
|
||||
"nama": "I Nyoman Krisna Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc5",
|
||||
"nama": "Ni Luh Desi Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc6",
|
||||
"nama": "I Komang Bima Santosa",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc7",
|
||||
"nama": "Ni Putu Cahya Utami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc8",
|
||||
"nama": "I Wayan Dimas Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc9",
|
||||
"nama": "Ni Kadek Purnama Sari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
{
|
||||
"id": "cmkoybh2p000h04lahbds4wc0",
|
||||
"nama": "I Made Yoga Kencana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd409"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1a",
|
||||
"nama": "I Nyoman Gede Sapta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1b",
|
||||
"nama": "Ni Luh Ayu Pertiwi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1c",
|
||||
"nama": "I Wayan Danu Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1d",
|
||||
"nama": "Ni Kadek Melati Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1e",
|
||||
"nama": "I Made Raka Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1f",
|
||||
"nama": "Ni Komang Sinta Laksmi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1g",
|
||||
"nama": "I Nyoman Arta Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1h",
|
||||
"nama": "Ni Putu Indah Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1i",
|
||||
"nama": "I Wayan Bagus Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoyc6ij000i04la3r8i7f1j",
|
||||
"nama": "Ni Kadek Ayu Wulandari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd410"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9ba",
|
||||
"nama": "I Made Arya Putra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bb",
|
||||
"nama": "I Komang Adi Saputra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bc",
|
||||
"nama": "I Nyoman Dewa Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bd",
|
||||
"nama": "I Ketut Agus Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9be",
|
||||
"nama": "Ni Luh Putu Sari Dewi",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bf",
|
||||
"nama": "Ni Kadek Ayu Lestari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bg",
|
||||
"nama": "I Made Surya Mahendra",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bh",
|
||||
"nama": "I Komang Yoga Pradipta",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bi",
|
||||
"nama": "Ni Putu Citra Wulandari",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
{
|
||||
"id": "cmkoycyfl000j04la757zg9bj",
|
||||
"nama": "I Nyoman Bayu Pramana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd411"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfa",
|
||||
"nama": "I Made Gede Pratama",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfb",
|
||||
"nama": "I Komang Krisna Yudha",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfc",
|
||||
"nama": "I Nyoman Putra Santika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfd",
|
||||
"nama": "I Ketut Wira Adnyana",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfe",
|
||||
"nama": "Ni Luh Kadek Maharani",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbff",
|
||||
"nama": "Ni Made Ayu Purnami",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfg",
|
||||
"nama": "I Putu Yoga Mahardika",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfh",
|
||||
"nama": "I Komang Dimas Prasetya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfi",
|
||||
"nama": "Ni Kadek Sinta Permata",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
},
|
||||
{
|
||||
"id": "cmkoydnnl000k04lae6jvhbfj",
|
||||
"nama": "I Nyoman Arta Wijaya",
|
||||
"lembagaId": "cmghqwjs4000404l8c6vwd412"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,47 @@
|
||||
[
|
||||
{
|
||||
"id": "cmkqb11mc000104jibq76bdzu",
|
||||
"name": "Fiksi"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibq87bdzu",
|
||||
"name": "Non Fiksi"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibq97bdzu",
|
||||
"name": "Pendidikan"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqa7bdzu",
|
||||
"name": "Ilmiah"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqb7bdzu",
|
||||
"name": "Drama"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqc7bdzu",
|
||||
"name": "Sejarah"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqd7bdzu",
|
||||
"name": "Teknologi"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqe7bdzu",
|
||||
"name": "Agama"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqf7bdzu",
|
||||
"name": "Pengembangan Diri"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqg7bdzu",
|
||||
"name": "Kesehatan"
|
||||
},
|
||||
{
|
||||
"id": "cmkqb11mc000104jibqh7bdzu",
|
||||
"name": "Anak Dan Remaja"
|
||||
}
|
||||
|
||||
]
|
||||
@@ -0,0 +1,142 @@
|
||||
[
|
||||
{
|
||||
"id": "cmkqhbi6f0002vneao4my49k9",
|
||||
"judul": "Laskar Pelangi",
|
||||
"deskripsi": "<p>Novel inspiratif tentang perjuangan anak-anak di Belitung dalam meraih pendidikan dan mimpi mereka</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq76bdzu",
|
||||
"imageId": "cmkqhbhxi0000vneamj3din9u"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhedff0005vneas3rtbumi",
|
||||
"judul": "Bumi Manusia",
|
||||
"deskripsi": "<p>Kisah kehidupan Minke di masa kolonial yang menggambarkan perjuangan, pendidikan, dan identitas bangsa</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqc7bdzu",
|
||||
"imageId": "cmkqhed8x0003vneakx0c7me2"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhg1g70008vneajbpz8phh",
|
||||
"judul": "Atomic Habits",
|
||||
"deskripsi": "<p>Panduan membangun kebiasaan kecil yang konsisten untuk menghasilkan perubahan besar dalam hidup</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqf7bdzu",
|
||||
"imageId": "cmkqhg1cb0006vneagsxa6t4t"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhl6sr000bvneampx0svus",
|
||||
"judul": "Clean Code",
|
||||
"deskripsi": "<p>Buku wajib programmer tentang cara menulis kode yang bersih, mudah dibaca, dan mudah dirawat</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqd7bdzu",
|
||||
"imageId": "cmkqhl6mv0009vneasgix42ud"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhoaa1000evnearppgpyxo",
|
||||
"judul": "Sejarah Indonesia Modern",
|
||||
"deskripsi": "<p>Membahas perjalanan sejarah Indonesia dari masa kolonial hingga era modern</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqc7bdzu",
|
||||
"imageId": "cmkqhoa5w000cvneah15n28zq"
|
||||
},
|
||||
{
|
||||
"id": "cmkqhr9oc000hvnea677ad3kb",
|
||||
"judul": "Ensiklopedia Anak Pintar",
|
||||
"deskripsi": "<p>Buku referensi bergambar yang membantu anak mengenal ilmu pengetahuan secara menyenangkan</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqh7bdzu",
|
||||
"imageId": "cmkqhr9lg000fvneai3q8qw0s"
|
||||
},
|
||||
{
|
||||
"id": "cmkqi5ksf000kvnea9c04n2hy",
|
||||
"judul": "Filosofi Teras",
|
||||
"deskripsi": "<p>Pengenalan filsafat Stoikisme untuk menghadapi kehidupan modern dengan lebih tenang</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq87bdzu",
|
||||
"imageId": "cmkqi5knc000ivnea8grp7j06"
|
||||
},
|
||||
{
|
||||
"id": "cmkqi97hq000nvneaparjbcrm",
|
||||
"judul": "Pemrograman JavaScript Dasar",
|
||||
"deskripsi": "<p>Panduan dasar belajar JavaScript untuk pemula dalam dunia pengembangan web</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqd7bdzu",
|
||||
"imageId": "cmkqi9799000lvneamskmvpq5"
|
||||
},
|
||||
{
|
||||
"id": "cmkqibjt9000qvnea13ox7fmv",
|
||||
"judul": "Pendidikan Karakter",
|
||||
"deskripsi": "<p>Buku yang membahas pentingnya pendidikan karakter dalam membentuk generasi bangsa</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqf7bdzu",
|
||||
"imageId": "cmkqibjj2000ovnea3zmmvdop"
|
||||
},
|
||||
{
|
||||
"id": "cmkqidnar000tvneaohk5v8k6",
|
||||
"judul": "Psikologi Kepribadian",
|
||||
"deskripsi": "<p>Mengenal teori-teori kepribadian manusia dalam perspektif psikologi</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq87bdzu",
|
||||
"imageId": "cmkqidn7e000rvnea5rl58f2e"
|
||||
},
|
||||
{
|
||||
"id": "cmkqifdiu000wvnea7xd0yi4f",
|
||||
"judul": "Ayat-Ayat Cinta",
|
||||
"deskripsi": "<p>Novel religi yang mengangkat kisah cinta, iman, dan perjuangan hidup</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqe7bdzu",
|
||||
"imageId": "cmkqifdfs000uvneajss8zswp"
|
||||
},
|
||||
{
|
||||
"id": "cmkqik7vi000zvneae7d5cq9i",
|
||||
"judul": "Negeri 5 Menara",
|
||||
"deskripsi": "<p>Cerita persahabatan dan perjuangan santri dalam mengejar mimpi hingga ke mancanegara</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq76bdzu",
|
||||
"imageId": "cmkqik7p5000xvnea6krii3vw"
|
||||
},
|
||||
{
|
||||
"id": "cmkqinno30012vneac1sgsvis",
|
||||
"judul": "Belajar UI/UX Design",
|
||||
"deskripsi": "<p>Panduan praktis memahami desain antarmuka dan pengalaman pengguna</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqd7bdzu",
|
||||
"imageId": "cmkqinnih0010vneakpjb9egl"
|
||||
},
|
||||
{
|
||||
"id": "cmkqiqegd0015vneawv5u5tpm",
|
||||
"judul": "Manajemen Waktu Efektif",
|
||||
"deskripsi": "<p>Teknik mengatur waktu agar lebih produktif dan fokus pada hal penting</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqf7bdzu",
|
||||
"imageId": "cmkqiqeb60013vnea2ygrq5rs"
|
||||
},
|
||||
{
|
||||
"id": "cmkqiurc60018vneavyd3pj9q",
|
||||
"judul": "Dongeng Nusantara",
|
||||
"deskripsi": "<p>Kumpulan dongeng tradisional Indonesia yang sarat pesan moral</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq76bdzu",
|
||||
"imageId": "cmkqiur960016vnea3werdoey"
|
||||
},
|
||||
{
|
||||
"id": "cmkqix2kb001bvnea5v81cw7p",
|
||||
"judul": "Ekonomi Makro",
|
||||
"deskripsi": "<p>Pembahasan konsep ekonomi makro secara sistematis dan mudah dipahami</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq87bdzu",
|
||||
"imageId": "cmkqix2go0019vnea8coousvn"
|
||||
},
|
||||
{
|
||||
"id": "cmkqiyts2001evneahnk45ry5",
|
||||
"judul": "Seni Berpikir Kritis",
|
||||
"deskripsi": "<p>Buku yang membantu pembaca menghindari kesalahan berpikir dalam pengambilan keputusan</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq87bdzu",
|
||||
"imageId": "cmkqiytnv001cvnea7o2sv1vt"
|
||||
},
|
||||
{
|
||||
"id": "cmkqj0nq0001hvnea06r8m3kj",
|
||||
"judul": "Seni Berpikir Kritis",
|
||||
"deskripsi": "<p>Buku yang membantu pembaca menghindari kesalahan berpikir dalam pengambilan keputusan</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibq87bdzu",
|
||||
"imageId": "cmkqj0nn0001fvneaufur3nke"
|
||||
},
|
||||
{
|
||||
"id": "cmkqj37w4001kvnea04n9w2bx",
|
||||
"judul": "Panduan Shalat Lengkap",
|
||||
"deskripsi": "<p>Panduan praktis dan lengkap tentang tata cara shalat sesuai tuntunan</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqe7bdzu",
|
||||
"imageId": "cmkqj37rg001ivneam29fgayr"
|
||||
},
|
||||
{
|
||||
"id": "cmkqj5qp6001nvnea4xhvluz3",
|
||||
"judul": "Cerita Sains untuk Anak",
|
||||
"deskripsi": "<p>Cerita edukatif yang mengenalkan sains kepada anak dengan bahasa sederhana</p>",
|
||||
"kategoriId": "cmkqb11mc000104jibqh7bdzu",
|
||||
"imageId": "cmkqj5ql6001lvnea6p0afr9f"
|
||||
}
|
||||
]
|
||||
84
prisma/migrations/20260122074939_21_jan_26/migration.sql
Normal file
84
prisma/migrations/20260122074939_21_jan_26/migration.sql
Normal file
@@ -0,0 +1,84 @@
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "Berita" DROP CONSTRAINT "Berita_imageId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "InfoWabahPenyakit" DROP CONSTRAINT "InfoWabahPenyakit_imageId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "KontakDarurat" DROP CONSTRAINT "KontakDarurat_imageId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "PenangananDarurat" DROP CONSTRAINT "PenangananDarurat_imageId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "Posyandu" DROP CONSTRAINT "Posyandu_imageId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "ProgramKesehatan" DROP CONSTRAINT "ProgramKesehatan_imageId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "Puskesmas" DROP CONSTRAINT "Puskesmas_imageId_fkey";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Berita" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "InfoWabahPenyakit" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "KontakDarurat" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "PasarDesa" ADD COLUMN "deskripsi" TEXT;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "PenangananDarurat" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Posyandu" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "ProgramKesehatan" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Puskesmas" ALTER COLUMN "imageId" DROP NOT NULL;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "LayananToPolsek" (
|
||||
"id" TEXT NOT NULL,
|
||||
"layananId" TEXT NOT NULL,
|
||||
"polsekTerdekatId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"deletedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
|
||||
CONSTRAINT "LayananToPolsek_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Berita" ADD CONSTRAINT "Berita_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Posyandu" ADD CONSTRAINT "Posyandu_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Puskesmas" ADD CONSTRAINT "Puskesmas_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ProgramKesehatan" ADD CONSTRAINT "ProgramKesehatan_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "PenangananDarurat" ADD CONSTRAINT "PenangananDarurat_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "KontakDarurat" ADD CONSTRAINT "KontakDarurat_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "InfoWabahPenyakit" ADD CONSTRAINT "InfoWabahPenyakit_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "FileStorage"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "LayananToPolsek" ADD CONSTRAINT "LayananToPolsek_layananId_fkey" FOREIGN KEY ("layananId") REFERENCES "LayananPolsek"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "LayananToPolsek" ADD CONSTRAINT "LayananToPolsek_polsekTerdekatId_fkey" FOREIGN KEY ("polsekTerdekatId") REFERENCES "PolsekTerdekat"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
@@ -1,25 +1,78 @@
|
||||
// import prisma from "@/lib/prisma";
|
||||
|
||||
// // Ganti nama fungsi dan logikanya
|
||||
// export default async function resolveImageById(
|
||||
// imageId?: string | null
|
||||
// ): Promise<string | null> {
|
||||
// if (!imageId) return null;
|
||||
|
||||
// const image = await prisma.fileStorage.findFirst({
|
||||
// where: {
|
||||
// id: imageId, // ← cari berdasarkan ID
|
||||
// category: "image",
|
||||
// isActive: true,
|
||||
// deletedAt: null,
|
||||
// },
|
||||
// select: { id: true },
|
||||
// });
|
||||
|
||||
// if (!image) {
|
||||
// console.warn(`⚠️ Image with ID ${imageId} not found`);
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// return image.id;
|
||||
// }
|
||||
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
// Ganti nama fungsi dan logikanya
|
||||
export default async function resolveImageById(
|
||||
imageId?: string | null
|
||||
): Promise<string | null> {
|
||||
/**
|
||||
* Resolve image ID by checking multiple possible names
|
||||
* @param imageId - The ID from JSON (could be filename or actual ID)
|
||||
* @returns The actual database ID or null
|
||||
*/
|
||||
export default async function resolveImageById(imageId: string | null): Promise<string | null> {
|
||||
if (!imageId) return null;
|
||||
|
||||
const image = await prisma.fileStorage.findFirst({
|
||||
where: {
|
||||
id: imageId, // ← cari berdasarkan ID
|
||||
category: "image",
|
||||
isActive: true,
|
||||
deletedAt: null,
|
||||
},
|
||||
select: { id: true },
|
||||
});
|
||||
try {
|
||||
// 1. Coba cari berdasarkan ID langsung
|
||||
const byId = await prisma.fileStorage.findUnique({
|
||||
where: { id: imageId },
|
||||
select: { id: true },
|
||||
});
|
||||
if (byId) return byId.id;
|
||||
|
||||
if (!image) {
|
||||
console.warn(`⚠️ Image with ID ${imageId} not found`);
|
||||
// 2. Coba cari berdasarkan name (exact match)
|
||||
const byName = await prisma.fileStorage.findUnique({
|
||||
where: { name: imageId },
|
||||
select: { id: true },
|
||||
});
|
||||
if (byName) return byName.id;
|
||||
|
||||
// 3. Coba cari berdasarkan realName
|
||||
const byRealName = await prisma.fileStorage.findFirst({
|
||||
where: { realName: imageId },
|
||||
select: { id: true },
|
||||
});
|
||||
if (byRealName) return byRealName.id;
|
||||
|
||||
// 4. Coba dengan menambahkan ekstensi .webp
|
||||
const withWebp = `${imageId.replace(/\.(jpg|jpeg|png)$/i, '')}.webp`;
|
||||
const byWebp = await prisma.fileStorage.findFirst({
|
||||
where: {
|
||||
OR: [
|
||||
{ name: withWebp },
|
||||
{ name: { contains: imageId.split('.')[0] } },
|
||||
],
|
||||
},
|
||||
select: { id: true },
|
||||
});
|
||||
if (byWebp) return byWebp.id;
|
||||
|
||||
console.warn(`⚠️ Image not found for: ${imageId}`);
|
||||
return null;
|
||||
} catch (error) {
|
||||
console.error(`❌ Error resolving image ${imageId}:`, error);
|
||||
return null;
|
||||
}
|
||||
|
||||
return image.id;
|
||||
}
|
||||
45
prisma/safeSeedMany.ts
Normal file
45
prisma/safeSeedMany.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { safeSeedUnique } from "./safeseedUnique";
|
||||
import cliProgress from 'cli-progress';
|
||||
|
||||
type SafeSeedOptions = {
|
||||
skipUpdate?: boolean;
|
||||
silent?: boolean; // Opsional: untuk suppress log
|
||||
};
|
||||
|
||||
/**
|
||||
* Batch upsert with progress logging
|
||||
*/
|
||||
export async function safeSeedMany<T extends keyof PrismaClient>(
|
||||
model: T,
|
||||
items: Array<{ where: Record<string, any>; data: Record<string, any> }>,
|
||||
options: SafeSeedOptions = {}
|
||||
) {
|
||||
const bar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);
|
||||
bar.start(items.length, 0);
|
||||
|
||||
let success = 0;
|
||||
let failed = 0;
|
||||
let skipped = 0;
|
||||
|
||||
for (const [index, item] of items.entries()) {
|
||||
try {
|
||||
const result = await safeSeedUnique(model, item.where, item.data, {
|
||||
...options,
|
||||
silent: true,
|
||||
});
|
||||
if (result) success++;
|
||||
else skipped++;
|
||||
} catch (err) {
|
||||
failed++;
|
||||
}
|
||||
bar.update(index + 1);
|
||||
}
|
||||
|
||||
bar.stop();
|
||||
console.log(`✅ ${String(model)}: ${success} seeded, ${skipped} skipped, ${failed} failed`);
|
||||
|
||||
return { success, skipped, failed };
|
||||
}
|
||||
@@ -4,9 +4,16 @@ import { PrismaClient } from "@prisma/client";
|
||||
|
||||
type SafeSeedOptions = {
|
||||
skipUpdate?: boolean;
|
||||
silent?: boolean; // Opsional: untuk suppress log
|
||||
};
|
||||
|
||||
// prisma/safeseedUnique.ts
|
||||
/**
|
||||
* Safely upsert data with error handling
|
||||
* @param model - Prisma model name
|
||||
* @param where - Unique identifier(s)
|
||||
* @param data - Full data object (will be used for create)
|
||||
* @param options - Additional options
|
||||
*/
|
||||
export async function safeSeedUnique<T extends keyof PrismaClient>(
|
||||
model: T,
|
||||
where: Record<string, any>,
|
||||
@@ -14,23 +21,87 @@ export async function safeSeedUnique<T extends keyof PrismaClient>(
|
||||
options: SafeSeedOptions = {}
|
||||
) {
|
||||
const m = prisma[model] as any;
|
||||
if (!m) throw new Error(`Model ${String(model)} tidak ditemukan`);
|
||||
|
||||
if (!m) {
|
||||
throw new Error(`❌ Model ${String(model)} tidak ditemukan di Prisma Client`);
|
||||
}
|
||||
|
||||
try {
|
||||
// Pastikan `where` berisi field yang benar-benar unique (misal: `id`)
|
||||
const result = await m.upsert({
|
||||
where,
|
||||
update: options.skipUpdate ? {} : data,
|
||||
create: data, // ✅ Jangan duplikasi `where` ke `create`
|
||||
create: data,
|
||||
});
|
||||
console.log(`✅ Seed ${String(model)}:`, where);
|
||||
|
||||
if (!options.silent) {
|
||||
console.log(`✅ Seeded ${String(model)}:`, where);
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (err) {
|
||||
console.error(`❌ Gagal seed ${String(model)}:`, where, err);
|
||||
throw err; // ✅ Rethrow agar seeding berhenti jika kritis
|
||||
} catch (err: any) {
|
||||
// Handle specific Prisma errors
|
||||
if (err.code === "P2002") {
|
||||
console.warn(`⚠️ Duplicate ${String(model)} (skipped):`, where);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (err.code === "P2003") {
|
||||
console.error(`❌ Foreign key constraint failed for ${String(model)}:`, where);
|
||||
console.error(" Missing relation:", err.meta?.field_name);
|
||||
throw err;
|
||||
}
|
||||
|
||||
if (err.code === "P2025") {
|
||||
console.error(`❌ Record not found for ${String(model)}:`, where);
|
||||
throw err;
|
||||
}
|
||||
|
||||
// Log unexpected errors with full details
|
||||
console.error(`❌ Failed to seed ${String(model)}:`, where);
|
||||
console.error(" Error:", err.message);
|
||||
console.error(" Code:", err.code);
|
||||
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//ini yang bener pertama
|
||||
|
||||
// /* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
// import prisma from "@/lib/prisma";
|
||||
// import { PrismaClient } from "@prisma/client";
|
||||
|
||||
// type SafeSeedOptions = {
|
||||
// skipUpdate?: boolean;
|
||||
// };
|
||||
|
||||
// // prisma/safeseedUnique.ts
|
||||
// export async function safeSeedUnique<T extends keyof PrismaClient>(
|
||||
// model: T,
|
||||
// where: Record<string, any>,
|
||||
// data: Record<string, any>,
|
||||
// options: SafeSeedOptions = {}
|
||||
// ) {
|
||||
// const m = prisma[model] as any;
|
||||
// if (!m) throw new Error(`Model ${String(model)} tidak ditemukan`);
|
||||
|
||||
// try {
|
||||
// // Pastikan `where` berisi field yang benar-benar unique (misal: `id`)
|
||||
// const result = await m.upsert({
|
||||
// where,
|
||||
// update: options.skipUpdate ? {} : data,
|
||||
// create: data, // ✅ Jangan duplikasi `where` ke `create`
|
||||
// });
|
||||
// console.log(`✅ Seed ${String(model)}:`, where);
|
||||
// return result;
|
||||
// } catch (err) {
|
||||
// console.error(`❌ Gagal seed ${String(model)}:`, where, err);
|
||||
// throw err; // ✅ Rethrow agar seeding berhenti jika kritis
|
||||
// }
|
||||
// }
|
||||
|
||||
// /* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
// import { PrismaClient } from "@prisma/client";
|
||||
|
||||
|
||||
@@ -1655,17 +1655,17 @@ model Pembiayaan {
|
||||
|
||||
// ========================================= MENU INOVASI ========================================= //
|
||||
// ========================================= DESA DIGITAL / SMART VILLAGE ========================================= //
|
||||
model DesaDigital {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
deskripsi String @db.Text
|
||||
image FileStorage @relation(fields: [imageId], references: [id])
|
||||
imageId String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime @default(now())
|
||||
isActive Boolean @default(true)
|
||||
}
|
||||
model DesaDigital {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
deskripsi String @db.Text
|
||||
image FileStorage @relation(fields: [imageId], references: [id])
|
||||
imageId String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime @default(now())
|
||||
isActive Boolean @default(true)
|
||||
}
|
||||
|
||||
// ========================================= PROGRAM KREATIF ========================================= //
|
||||
model ProgramKreatif {
|
||||
@@ -1719,19 +1719,19 @@ model InfoTekno {
|
||||
}
|
||||
|
||||
// ========================================= AJUKAN IDE INOVATIF ========================================= //
|
||||
model AjukanIdeInovatif {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
alamat String
|
||||
namaIde String
|
||||
deskripsi String @db.Text
|
||||
masalah String @db.Text
|
||||
benefit String @db.Text
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime @default(now())
|
||||
isActive Boolean @default(true)
|
||||
}
|
||||
model AjukanIdeInovatif {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
alamat String
|
||||
namaIde String
|
||||
deskripsi String @db.Text
|
||||
masalah String @db.Text
|
||||
benefit String @db.Text
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime @default(now())
|
||||
isActive Boolean @default(true)
|
||||
}
|
||||
|
||||
// ========================================= LAYANAN ONLINE DESA ========================================= //
|
||||
model AdministrasiOnline {
|
||||
@@ -1934,7 +1934,7 @@ model NilaiKonservasiAdat {
|
||||
// ========================================= INFO SEKOLAH & PAUD ========================================= //
|
||||
model JenjangPendidikan {
|
||||
id String @id @default(cuid())
|
||||
nama String // TK/PAUD, SD, SMP, SMA/SMK
|
||||
nama String // TK/PAUD, SD, SMP, SMA/SMK
|
||||
lembagas Lembaga[] // Relasi ke lembaga
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
@@ -2179,6 +2179,18 @@ enum StatusPeminjaman {
|
||||
Dibatalkan
|
||||
}
|
||||
|
||||
|
||||
// ========================================= DATA PENDIDIKAN ========================================= //
|
||||
model DataPendidikan {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
jumlah String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime @default(now())
|
||||
isActive Boolean @default(true)
|
||||
}
|
||||
|
||||
// ========================================= USER ========================================= //
|
||||
|
||||
model User {
|
||||
@@ -2249,14 +2261,3 @@ model UserMenuAccess {
|
||||
|
||||
@@unique([userId, menuId]) // Satu user tidak bisa punya akses menu yang sama dua kali
|
||||
}
|
||||
|
||||
// ========================================= DATA PENDIDIKAN ========================================= //
|
||||
model DataPendidikan {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
jumlah String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime @default(now())
|
||||
isActive Boolean @default(true)
|
||||
}
|
||||
|
||||
213
prisma/seed.ts
213
prisma/seed.ts
@@ -77,20 +77,25 @@ import mitraKolaborasi from "./data/inovasi/kolaborasi-inovasi/mitra-kolaborasi.
|
||||
import infoTeknologi from "./data/inovasi/info-teknologi/info-teknologi.json";
|
||||
import ajukanIde from "./data/inovasi/ajukan-ide/ajukan-ide.json";
|
||||
import pengelolaanSampah from "./data/lingkungan/pengelolaan-sampah/pengelolaan-sampah.json";
|
||||
import keteranganBankSampah from "./data/lingkungan/pengelolaan-sampah/keterangan-bank-sampah.json"
|
||||
import programPenghijauan from "./data/lingkungan/program-penghijauan/program-penghijauan.json"
|
||||
import keteranganBankSampah from "./data/lingkungan/pengelolaan-sampah/keterangan-bank-sampah.json";
|
||||
import programPenghijauan from "./data/lingkungan/program-penghijauan/program-penghijauan.json";
|
||||
import dataLingkunganDesa from "./data/lingkungan/data-lingkungan-desa/data-lingkungan-desa.json";
|
||||
import kategoriGotongRoyong from "./data/lingkungan/gotong-royong/kategori-gotong-royong.json";
|
||||
import gotongRoyong from "./data/lingkungan/gotong-royong/gotong-royong.json"
|
||||
import gotongRoyong from "./data/lingkungan/gotong-royong/gotong-royong.json";
|
||||
import berita from "./data/desa/berita/berita.json";
|
||||
import kategoriBerita from "./data/desa/berita/kategori-berita.json";
|
||||
import contohEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/contoh-kegiatan-di-desa-darmasaba.json";
|
||||
import materiEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan.json";
|
||||
import tujuanEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan.json";
|
||||
import bentukKonservasiBerdasarkanAdat from "./data/lingkungan/konservasi-adat-bali/bentuk-konservasi.json";
|
||||
import kategoriKegiatanData from "./data/lingkungan/gotong-royong/kategori-gotong-royong.json";
|
||||
import filosofiTriHita from "./data/lingkungan/konservasi-adat-bali/filosofi-tri-hita.json";
|
||||
import nilaiKonservasiAdat from "./data/lingkungan/konservasi-adat-bali/nilai-konservasi-adat.json";
|
||||
import jenjangPendidikan from "./data/pendidikan/info-sekolah/jenjang-pendidikan.json";
|
||||
import lembagaPendidikan from "./data/pendidikan/info-sekolah/lembaga.json";
|
||||
import siswa from "./data/pendidikan/info-sekolah/siswa.json";
|
||||
import pengajar from "./data/pendidikan/info-sekolah/pengajar.json";
|
||||
import dataPerpustakaan from "./data/pendidikan/perpustakaan-digital/perpustakaan-digital.json";
|
||||
import dataPendidikan from "./data/pendidikan/data-pendidikan/data-pendidikan.json"
|
||||
import caraMemperolehInformasi from "./data/list-caraMemperolehInformasi.json";
|
||||
import caraMemperolehSalinanInformasi from "./data/list-caraMemperolehSalinanInformasi.json";
|
||||
import jenisInformasiDiminta from "./data/list-jenisInfromasi.json";
|
||||
@@ -104,15 +109,12 @@ import tempatKegiatan from "./data/pendidikan/pendidikan-non-formal/tempat-kegia
|
||||
import tujuanProgram2 from "./data/pendidikan/pendidikan-non-formal/tujuan-program2.json";
|
||||
import programUnggulan from "./data/pendidikan/program-pendidikan-anak/program-unggulan.json";
|
||||
import tujuanProgram from "./data/pendidikan/program-pendidikan-anak/tujuan-program.json";
|
||||
import kategoriBuku from "./data/pendidikan/perpustakaan-digital/kategori-buku.json";
|
||||
import roles from "./data/user/roles.json";
|
||||
import fileStorage from "./data/file-storage.json";
|
||||
import jenjangPendidikan from "./data/pendidikan/info-sekolah/jenjang-pendidikan.json";
|
||||
import seedAssets from "./seed_assets";
|
||||
import users from "./data/user/users.json";
|
||||
import { safeSeedUnique } from "./safeseedUnique";
|
||||
import safeImageId from "./data/safeImageId";
|
||||
import resolveImageIdForSeed from "./data/resolveImageId";
|
||||
import resolveImageByName from "./resolveImageByName";
|
||||
import resolveImageById from "./resolveImageByName";
|
||||
|
||||
(async () => {
|
||||
@@ -1903,7 +1905,6 @@ import resolveImageById from "./resolveImageByName";
|
||||
imageId: t.imageId,
|
||||
},
|
||||
create: {
|
||||
id: t.id,
|
||||
judul: t.judul,
|
||||
deskripsi: t.deskripsi,
|
||||
imageId: t.imageId,
|
||||
@@ -2163,40 +2164,46 @@ import resolveImageById from "./resolveImageByName";
|
||||
console.log("✅ Jumlah Penduduk Miskin seeded successfully");
|
||||
|
||||
// ==================== SUBMENU PROGRAM KEMISKINAN =============
|
||||
for (const k of statistikKemiskinan) {
|
||||
for (const s of statistikKemiskinan) {
|
||||
await prisma.statistikKemiskinan.upsert({
|
||||
where: {
|
||||
tahun: k.tahun,
|
||||
},
|
||||
where: { tahun: s.tahun }, // ✅ FIX
|
||||
update: {
|
||||
jumlah: k.jumlah,
|
||||
jumlah: s.jumlah,
|
||||
},
|
||||
create: {
|
||||
tahun: k.tahun,
|
||||
jumlah: k.jumlah,
|
||||
id: s.id, // id boleh tetap
|
||||
tahun: s.tahun,
|
||||
jumlah: s.jumlah,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log("📊 Statistik Kemiskinan seeded successfully");
|
||||
|
||||
console.log("🔄 Seeding Program Kemiskinan...");
|
||||
for (const k of programKemiskinan) {
|
||||
await prisma.programKemiskinan.upsert({
|
||||
where: {
|
||||
id: k.id,
|
||||
},
|
||||
where: { id: k.id },
|
||||
update: {
|
||||
nama: k.nama,
|
||||
deskripsi: k.deskripsi,
|
||||
icon: k.icon,
|
||||
statistikId: k.statistikId,
|
||||
statistik: {
|
||||
connect: {
|
||||
tahun: k.tahun, // 👈 BUKAN ID
|
||||
},
|
||||
},
|
||||
},
|
||||
create: {
|
||||
id: k.id,
|
||||
nama: k.nama,
|
||||
deskripsi: k.deskripsi,
|
||||
icon: k.icon,
|
||||
statistikId: k.statistikId,
|
||||
statistik: {
|
||||
connect: {
|
||||
tahun: k.tahun,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -2490,12 +2497,12 @@ import resolveImageById from "./resolveImageByName";
|
||||
},
|
||||
update: {
|
||||
name: p.name,
|
||||
icon: p.icon
|
||||
icon: p.icon,
|
||||
},
|
||||
create: {
|
||||
id: p.id,
|
||||
name: p.name,
|
||||
icon: p.icon
|
||||
icon: p.icon,
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -2513,7 +2520,7 @@ import resolveImageById from "./resolveImageByName";
|
||||
namaTempatMaps: p.namaTempatMaps,
|
||||
linkPetunjukArah: p.linkPetunjukArah,
|
||||
lat: p.lat,
|
||||
lng: p.lng
|
||||
lng: p.lng,
|
||||
},
|
||||
create: {
|
||||
id: p.id,
|
||||
@@ -2522,7 +2529,7 @@ import resolveImageById from "./resolveImageByName";
|
||||
namaTempatMaps: p.namaTempatMaps,
|
||||
linkPetunjukArah: p.linkPetunjukArah,
|
||||
lat: p.lat,
|
||||
lng: p.lng
|
||||
lng: p.lng,
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -2539,14 +2546,14 @@ import resolveImageById from "./resolveImageByName";
|
||||
name: p.name,
|
||||
judul: p.judul,
|
||||
deskripsi: p.deskripsi,
|
||||
icon: p.icon
|
||||
icon: p.icon,
|
||||
},
|
||||
create: {
|
||||
id: p.id,
|
||||
name: p.name,
|
||||
judul: p.judul,
|
||||
deskripsi: p.deskripsi,
|
||||
icon: p.icon
|
||||
icon: p.icon,
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -2563,14 +2570,14 @@ import resolveImageById from "./resolveImageByName";
|
||||
name: p.name,
|
||||
jumlah: p.jumlah,
|
||||
deskripsi: p.deskripsi,
|
||||
icon: p.icon
|
||||
icon: p.icon,
|
||||
},
|
||||
create: {
|
||||
id: p.id,
|
||||
name: p.name,
|
||||
jumlah: p.jumlah,
|
||||
deskripsi: p.deskripsi,
|
||||
icon: p.icon
|
||||
icon: p.icon,
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -2629,9 +2636,8 @@ import resolveImageById from "./resolveImageByName";
|
||||
|
||||
console.log("✅ Kategori Gotong Royong seeded successfully");
|
||||
|
||||
|
||||
|
||||
|
||||
// =========== SUBMENU EDUKASI LINGKUNGAN ===========
|
||||
|
||||
for (const e of tujuanEdukasiLingkungan) {
|
||||
await prisma.tujuanEdukasiLingkungan.upsert({
|
||||
where: {
|
||||
@@ -2689,6 +2695,8 @@ import resolveImageById from "./resolveImageByName";
|
||||
|
||||
console.log("contoh edukasi lingkungan success ...");
|
||||
|
||||
// =========== SUBMENU KONSERVASI ADAT BALI ===========
|
||||
|
||||
for (const f of filosofiTriHita) {
|
||||
await prisma.filosofiTriHita.upsert({
|
||||
where: {
|
||||
@@ -2746,6 +2754,85 @@ import resolveImageById from "./resolveImageByName";
|
||||
|
||||
console.log("nilai konservasi adat success ...");
|
||||
|
||||
// ====================== MENU PENDIDIKAN ==========================
|
||||
// =========== SUBMENU INFO SEKOLAH =====================
|
||||
|
||||
for (const j of jenjangPendidikan) {
|
||||
await prisma.jenjangPendidikan.upsert({
|
||||
where: {
|
||||
id: j.id,
|
||||
},
|
||||
update: {
|
||||
nama: j.nama,
|
||||
},
|
||||
create: {
|
||||
id: j.id,
|
||||
nama: j.nama,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log("✅ Jenjang Pendidikan seeded successfully");
|
||||
|
||||
for (const j of lembagaPendidikan) {
|
||||
await prisma.lembaga.upsert({
|
||||
where: {
|
||||
id: j.id,
|
||||
},
|
||||
update: {
|
||||
nama: j.nama,
|
||||
jenjangId: j.jenjangId,
|
||||
},
|
||||
create: {
|
||||
id: j.id,
|
||||
nama: j.nama,
|
||||
jenjangId: j.jenjangId,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log("✅ Lembaga Pendidikan seeded successfully");
|
||||
|
||||
for (const j of siswa) {
|
||||
await prisma.siswa.upsert({
|
||||
where: {
|
||||
id: j.id,
|
||||
},
|
||||
update: {
|
||||
nama: j.nama,
|
||||
lembagaId: j.lembagaId,
|
||||
},
|
||||
create: {
|
||||
id: j.id,
|
||||
nama: j.nama,
|
||||
lembagaId: j.lembagaId,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log("✅ siswa seeded successfully");
|
||||
|
||||
for (const j of pengajar) {
|
||||
await prisma.pengajar.upsert({
|
||||
where: {
|
||||
id: j.id,
|
||||
},
|
||||
update: {
|
||||
nama: j.nama,
|
||||
lembagaId: j.lembagaId,
|
||||
},
|
||||
create: {
|
||||
id: j.id,
|
||||
nama: j.nama,
|
||||
lembagaId: j.lembagaId,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log("✅ pengajar seeded successfully");
|
||||
|
||||
// =========== SUBMENU PROGRAM PENDIDIKAN ANAK =====================
|
||||
|
||||
for (const t of tujuanProgram) {
|
||||
await prisma.tujuanProgram.upsert({
|
||||
where: { id: t.id },
|
||||
@@ -2778,6 +2865,8 @@ import resolveImageById from "./resolveImageByName";
|
||||
}
|
||||
console.log("✅ program unggulan seeded (editable later via UI)");
|
||||
|
||||
// =========== SUBMENU BIMBINGAN BELAJAR DESA =====================
|
||||
|
||||
for (const t of tujuanBimbinganBelajarDesa) {
|
||||
await prisma.tujuanBimbinganBelajarDesa.upsert({
|
||||
where: { id: t.id },
|
||||
@@ -2832,6 +2921,8 @@ import resolveImageById from "./resolveImageByName";
|
||||
"✅ fasilitas bimbingan belajar desa seeded (editable later via UI)",
|
||||
);
|
||||
|
||||
// =========== SUBMENU PENDIDIKAN NON FORMAL =====================
|
||||
|
||||
for (const t of tujuanProgram2) {
|
||||
await prisma.tujuanPendidikanNonFormal.upsert({
|
||||
where: { id: t.id },
|
||||
@@ -2886,21 +2977,67 @@ import resolveImageById from "./resolveImageByName";
|
||||
"✅ fasilitas bimbingan belajar desa seeded (editable later via UI)",
|
||||
);
|
||||
|
||||
for (const j of jenjangPendidikan) {
|
||||
await prisma.jenjangPendidikan.upsert({
|
||||
// =========== SUBMENU PERPUSTAKAAN DIGITAL =====================
|
||||
console.log("🔄 Seeding Kategori Buku...");
|
||||
for (const k of kategoriBuku) {
|
||||
await prisma.kategoriBuku.upsert({
|
||||
where: {
|
||||
id: j.id || undefined,
|
||||
id: k.id,
|
||||
},
|
||||
update: {
|
||||
nama: j.nama,
|
||||
name: k.name,
|
||||
},
|
||||
create: {
|
||||
nama: j.nama,
|
||||
id: k.id,
|
||||
name: k.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
console.log("✅ Kategori Buku seeded successfully");
|
||||
|
||||
console.log("🔄 Seeding Data perpustakaan...");
|
||||
for (const k of dataPerpustakaan) {
|
||||
await prisma.dataPerpustakaan.upsert({
|
||||
where: {
|
||||
id: k.id,
|
||||
},
|
||||
update: {
|
||||
judul: k.judul,
|
||||
deskripsi: k.deskripsi,
|
||||
kategoriId: k.kategoriId,
|
||||
imageId: k.imageId,
|
||||
},
|
||||
create: {
|
||||
id: k.id,
|
||||
judul: k.judul,
|
||||
deskripsi: k.deskripsi,
|
||||
kategoriId: k.kategoriId,
|
||||
imageId: k.imageId,
|
||||
},
|
||||
});
|
||||
}
|
||||
console.log("✅ Data perpustakaan seeded successfully");
|
||||
|
||||
// =========== SUBMENU DATA PENDIDIKAN =====================
|
||||
console.log("🔄 Seeding Data pendidikan...");
|
||||
for (const k of dataPendidikan) {
|
||||
await prisma.dataPendidikan.upsert({
|
||||
where: {
|
||||
id: k.id,
|
||||
},
|
||||
update: {
|
||||
name: k.name,
|
||||
jumlah: k.jumlah
|
||||
},
|
||||
create: {
|
||||
id: k.id,
|
||||
name: k.name,
|
||||
jumlah: k.jumlah
|
||||
},
|
||||
});
|
||||
}
|
||||
console.log("✅ Data pendidikan seeded successfully");
|
||||
|
||||
console.log("✅ Jenjang Pendidikan seeded successfully");
|
||||
})()
|
||||
.then(() => prisma.$disconnect())
|
||||
.catch((e) => {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
// /* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
// // prisma/seedAssets.ts
|
||||
// import prisma from "@/lib/prisma";
|
||||
@@ -7,9 +8,7 @@
|
||||
// import sharp from "sharp";
|
||||
// import fetchWithRetry from "./data/fetchWithRetry";
|
||||
|
||||
// const UPLOADS_DIR = path.resolve(
|
||||
// process.env.WIBU_UPLOAD_DIR || "uploads"
|
||||
// );
|
||||
// const UPLOADS_DIR = path.resolve(process.env.WIBU_UPLOAD_DIR || "uploads");
|
||||
|
||||
// // --- Helper: deteksi kategori file ---
|
||||
// function detectCategory(filename: string): "image" | "document" | "other" {
|
||||
@@ -22,7 +21,7 @@
|
||||
// // --- Helper: recursive walk dir ---
|
||||
// async function walkDir(
|
||||
// dir: string,
|
||||
// fileList: string[] = []
|
||||
// fileList: string[] = [],
|
||||
// ): Promise<string[]> {
|
||||
// const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
|
||||
@@ -49,7 +48,7 @@
|
||||
|
||||
// // 1. Download zip
|
||||
// const url =
|
||||
// "https://cld-dkr-makuro-seafile.wibudev.com/f/eadd52c5bd654ec789a3/?dl=1";
|
||||
// "https://cld-dkr-makuro-seafile.wibudev.com/f/03be4043989e4caeb36b/?dl=1";
|
||||
// const res = await fetchWithRetry(url, 3, 20000);
|
||||
|
||||
// // Validasi content-type
|
||||
@@ -162,7 +161,6 @@
|
||||
|
||||
// console.log("✅ Selesai seed assets!");
|
||||
// console.log("DB URL (asset):", process.env.DATABASE_URL);
|
||||
|
||||
// }
|
||||
|
||||
// // --- Auto run kalau dipanggil langsung ---
|
||||
@@ -177,186 +175,374 @@
|
||||
// });
|
||||
// }
|
||||
|
||||
// // prisma/seedAssets.ts
|
||||
// // import prisma from "@/lib/prisma";
|
||||
// // import AdmZip from "adm-zip";
|
||||
// // import fs from "fs/promises";
|
||||
// // import path from "path";
|
||||
// // import sharp from "sharp";
|
||||
// // import mime from "mime-types";
|
||||
// // import fetchWithRetry from "./data/fetchWithRetry";
|
||||
|
||||
// // /* =========================
|
||||
// // * CONFIG
|
||||
// // * ========================= */
|
||||
// // const UPLOADS_DIR = path.resolve(
|
||||
// // process.env.WIBU_UPLOAD_DIR || "uploads"
|
||||
// // );
|
||||
|
||||
// // const TMP_DIR = path.join(process.cwd(), "tmp_assets");
|
||||
|
||||
// // const CATEGORY_DIR: Record<FileCategory, string> = {
|
||||
// // image: "images",
|
||||
// // document: "documents",
|
||||
// // other: "other",
|
||||
// // };
|
||||
|
||||
// // type FileCategory = "image" | "document" | "other";
|
||||
|
||||
// // /* =========================
|
||||
// // * HELPERS
|
||||
// // * ========================= */
|
||||
// // function detectCategory(filename: string): FileCategory {
|
||||
// // const ext = path.extname(filename).toLowerCase();
|
||||
// // if ([".jpg", ".jpeg", ".png", ".webp"].includes(ext)) return "image";
|
||||
// // if ([".pdf", ".doc", ".docx", ".txt"].includes(ext)) return "document";
|
||||
// // return "other";
|
||||
// // }
|
||||
|
||||
// // async function walkDir(
|
||||
// // dir: string,
|
||||
// // result: string[] = []
|
||||
// // ): Promise<string[]> {
|
||||
// // const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
|
||||
// // for (const entry of entries) {
|
||||
// // const fullPath = path.join(dir, entry.name);
|
||||
|
||||
// // if (entry.isDirectory()) {
|
||||
// // if (entry.name === "__MACOSX") continue;
|
||||
// // await walkDir(fullPath, result);
|
||||
// // } else {
|
||||
// // if (entry.name.startsWith(".") || entry.name === ".DS_Store") continue;
|
||||
// // result.push(fullPath);
|
||||
// // }
|
||||
// // }
|
||||
|
||||
// // return result;
|
||||
// // }
|
||||
|
||||
// // async function ensureDir(dir: string) {
|
||||
// // await fs.mkdir(dir, { recursive: true });
|
||||
// // }
|
||||
|
||||
// // /* =========================
|
||||
// // * FILE PROCESSORS
|
||||
// // * ========================= */
|
||||
// // async function processImage(filePath: string, entryName: string) {
|
||||
// // const baseName = path.parse(entryName).name;
|
||||
// // const finalName = `${baseName}.webp`;
|
||||
// // const targetDir = path.join(UPLOADS_DIR, CATEGORY_DIR.image);
|
||||
// // const targetPath = path.join(targetDir, finalName);
|
||||
|
||||
// // await ensureDir(targetDir);
|
||||
// // await sharp(filePath).webp({ quality: 80 }).toFile(targetPath);
|
||||
|
||||
// // return {
|
||||
// // finalName,
|
||||
// // targetPath,
|
||||
// // mimeType: "image/webp",
|
||||
// // };
|
||||
// // }
|
||||
|
||||
// // async function processNonImage(
|
||||
// // filePath: string,
|
||||
// // entryName: string,
|
||||
// // category: FileCategory
|
||||
// // ) {
|
||||
// // const targetDir = path.join(UPLOADS_DIR, CATEGORY_DIR[category]);
|
||||
// // const targetPath = path.join(targetDir, entryName);
|
||||
|
||||
// // await ensureDir(targetDir);
|
||||
// // await fs.copyFile(filePath, targetPath);
|
||||
|
||||
// // return {
|
||||
// // finalName: entryName,
|
||||
// // targetPath,
|
||||
// // mimeType: mime.lookup(entryName) || "application/octet-stream",
|
||||
// // };
|
||||
// // }
|
||||
|
||||
// // /* =========================
|
||||
// // * MAIN
|
||||
// // * ========================= */
|
||||
// // export default async function seedAssets() {
|
||||
// // console.log("🚀 Seeding assets...");
|
||||
// // console.log("📁 Upload dir:", UPLOADS_DIR);
|
||||
|
||||
// // await ensureDir(UPLOADS_DIR);
|
||||
|
||||
// // /* ===== Download ZIP ===== */
|
||||
// // const url =
|
||||
// // "https://cld-dkr-makuro-seafile.wibudev.com/f/e13d5429785640c098ae/?dl=1";
|
||||
// // const res = await fetchWithRetry(url, 3, 20000);
|
||||
|
||||
// // if (!res.headers.get("content-type")?.includes("zip")) {
|
||||
// // throw new Error("Invalid ZIP content-type");
|
||||
// // }
|
||||
|
||||
// // const buffer = Buffer.from(await res.arrayBuffer());
|
||||
// // if (buffer.length < 100 || buffer.toString("utf8", 0, 2) !== "PK") {
|
||||
// // throw new Error("Corrupted ZIP file");
|
||||
// // }
|
||||
|
||||
// // /* ===== Extract ===== */
|
||||
// // await fs.rm(TMP_DIR, { recursive: true, force: true });
|
||||
// // await ensureDir(TMP_DIR);
|
||||
|
||||
// // const zip = new AdmZip(buffer);
|
||||
// // zip.extractAllTo(TMP_DIR, true);
|
||||
|
||||
// // /* ===== Process Files ===== */
|
||||
// // const files = await walkDir(TMP_DIR);
|
||||
|
||||
// // for (const filePath of files) {
|
||||
// // const entryName = path.basename(filePath);
|
||||
// // const category = detectCategory(entryName);
|
||||
|
||||
// // let result;
|
||||
|
||||
// // if (category === "image") {
|
||||
// // result = await processImage(filePath, entryName);
|
||||
// // } else {
|
||||
// // result = await processNonImage(filePath, entryName, category);
|
||||
// // }
|
||||
|
||||
// // const { finalName, targetPath, mimeType } = result;
|
||||
|
||||
// // const existing = await prisma.fileStorage.findUnique({
|
||||
// // where: { name: finalName },
|
||||
// // });
|
||||
|
||||
// // const data = {
|
||||
// // name: finalName,
|
||||
// // realName: entryName,
|
||||
// // path: targetPath,
|
||||
// // mimeType,
|
||||
// // link: `/uploads/${CATEGORY_DIR[category]}/${finalName}`,
|
||||
// // category,
|
||||
// // deletedAt: null,
|
||||
// // isActive: true,
|
||||
// // };
|
||||
|
||||
// // if (existing) {
|
||||
// // await prisma.fileStorage.update({
|
||||
// // where: { name: finalName },
|
||||
// // data,
|
||||
// // });
|
||||
// // console.log(`♻️ restored: ${category}/${finalName}`);
|
||||
// // } else {
|
||||
// // await prisma.fileStorage.create({ data });
|
||||
// // console.log(`📂 created: ${category}/${finalName}`);
|
||||
// // }
|
||||
// // }
|
||||
|
||||
// // /* ===== Cleanup ===== */
|
||||
// // await fs.rm(TMP_DIR, { recursive: true, force: true });
|
||||
|
||||
// // console.log("✅ Selesai seed assets!");
|
||||
// // }
|
||||
|
||||
// // /* ===== Auto Run ===== */
|
||||
// // if (import.meta.main) {
|
||||
// // seedAssets()
|
||||
// // .catch((err) => {
|
||||
// // console.error("❌ Error seeding assets:", err);
|
||||
// // process.exit(1);
|
||||
// // })
|
||||
// // .finally(async () => {
|
||||
// // await prisma.$disconnect();
|
||||
// // });
|
||||
// // }
|
||||
|
||||
// prisma/seedAssets.ts
|
||||
import prisma from "@/lib/prisma";
|
||||
import AdmZip from "adm-zip";
|
||||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
import sharp from "sharp";
|
||||
import mime from "mime-types";
|
||||
import fetchWithRetry from "./data/fetchWithRetry";
|
||||
import { constants } from "fs";
|
||||
|
||||
/* =========================
|
||||
* CONFIG
|
||||
* ========================= */
|
||||
const UPLOADS_DIR = path.resolve(
|
||||
process.env.WIBU_UPLOAD_DIR || "uploads"
|
||||
);
|
||||
// ✅ Gunakan env variable dengan fallback
|
||||
const UPLOADS_DIR = path.join(process.cwd(), process.env.WIBU_UPLOAD_DIR || "uploads");
|
||||
|
||||
const TMP_DIR = path.join(process.cwd(), "tmp_assets");
|
||||
|
||||
const CATEGORY_DIR: Record<FileCategory, string> = {
|
||||
image: "images",
|
||||
document: "documents",
|
||||
other: "other",
|
||||
};
|
||||
|
||||
type FileCategory = "image" | "document" | "other";
|
||||
|
||||
/* =========================
|
||||
* HELPERS
|
||||
* ========================= */
|
||||
function detectCategory(filename: string): FileCategory {
|
||||
function detectCategory(filename: string): "image" | "document" | "other" {
|
||||
const ext = path.extname(filename).toLowerCase();
|
||||
if ([".jpg", ".jpeg", ".png", ".webp"].includes(ext)) return "image";
|
||||
if ([".pdf", ".doc", ".docx", ".txt"].includes(ext)) return "document";
|
||||
if ([".pdf", ".doc", ".docx"].includes(ext)) return "document";
|
||||
return "other";
|
||||
}
|
||||
|
||||
async function walkDir(
|
||||
dir: string,
|
||||
result: string[] = []
|
||||
fileList: string[] = [],
|
||||
): Promise<string[]> {
|
||||
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(dir, entry.name);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
if (entry.name === "__MACOSX") continue;
|
||||
await walkDir(fullPath, result);
|
||||
await walkDir(fullPath, fileList);
|
||||
} else {
|
||||
if (entry.name.startsWith(".") || entry.name === ".DS_Store") continue;
|
||||
result.push(fullPath);
|
||||
fileList.push(fullPath);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return fileList;
|
||||
}
|
||||
|
||||
async function ensureDir(dir: string) {
|
||||
await fs.mkdir(dir, { recursive: true });
|
||||
}
|
||||
|
||||
/* =========================
|
||||
* FILE PROCESSORS
|
||||
* ========================= */
|
||||
async function processImage(filePath: string, entryName: string) {
|
||||
const baseName = path.parse(entryName).name;
|
||||
const finalName = `${baseName}.webp`;
|
||||
const targetDir = path.join(UPLOADS_DIR, CATEGORY_DIR.image);
|
||||
const targetPath = path.join(targetDir, finalName);
|
||||
|
||||
await ensureDir(targetDir);
|
||||
await sharp(filePath).webp({ quality: 80 }).toFile(targetPath);
|
||||
|
||||
return {
|
||||
finalName,
|
||||
targetPath,
|
||||
mimeType: "image/webp",
|
||||
};
|
||||
}
|
||||
|
||||
async function processNonImage(
|
||||
filePath: string,
|
||||
entryName: string,
|
||||
category: FileCategory
|
||||
) {
|
||||
const targetDir = path.join(UPLOADS_DIR, CATEGORY_DIR[category]);
|
||||
const targetPath = path.join(targetDir, entryName);
|
||||
|
||||
await ensureDir(targetDir);
|
||||
await fs.copyFile(filePath, targetPath);
|
||||
|
||||
return {
|
||||
finalName: entryName,
|
||||
targetPath,
|
||||
mimeType: mime.lookup(entryName) || "application/octet-stream",
|
||||
};
|
||||
}
|
||||
|
||||
/* =========================
|
||||
* MAIN
|
||||
* ========================= */
|
||||
export default async function seedAssets() {
|
||||
console.log("🚀 Seeding assets...");
|
||||
console.log("📁 Upload dir:", UPLOADS_DIR);
|
||||
|
||||
await ensureDir(UPLOADS_DIR);
|
||||
try {
|
||||
await fs.access(UPLOADS_DIR, fs.constants.W_OK);
|
||||
} catch (err) {
|
||||
console.error("❌ Upload directory is not writable:", UPLOADS_DIR);
|
||||
throw new Error(
|
||||
`UPLOADS_DIR not writable: ${UPLOADS_DIR}. Check Docker volume or permissions`
|
||||
);
|
||||
}
|
||||
|
||||
// ✅ Pastikan folder exist
|
||||
await fs.mkdir(UPLOADS_DIR, { recursive: true });
|
||||
try {
|
||||
await fs.access(UPLOADS_DIR, constants.W_OK);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`UPLOADS_DIR not writable: ${UPLOADS_DIR}. Check Docker volume or permissions`
|
||||
);
|
||||
}
|
||||
await fs.mkdir(path.join(UPLOADS_DIR, "images"), { recursive: true });
|
||||
await fs.mkdir(path.join(UPLOADS_DIR, "documents"), { recursive: true });
|
||||
await fs.mkdir(path.join(UPLOADS_DIR, "other"), { recursive: true });
|
||||
|
||||
/* ===== Download ZIP ===== */
|
||||
const url =
|
||||
"https://cld-dkr-makuro-seafile.wibudev.com/f/eadd52c5bd654ec789a3/?dl=1";
|
||||
const res = await fetchWithRetry(url, 3, 20000);
|
||||
"https://cld-dkr-makuro-seafile.wibudev.com/f/8e9e42e9f3e94c80919e/?dl=1";
|
||||
|
||||
if (!res.headers.get("content-type")?.includes("zip")) {
|
||||
throw new Error("Invalid ZIP content-type");
|
||||
let buffer: Buffer;
|
||||
try {
|
||||
console.log("⬇️ Downloading ZIP from:", url);
|
||||
const res = await fetchWithRetry(url, 3, 20000);
|
||||
|
||||
const contentType = res.headers.get("content-type");
|
||||
if (
|
||||
!contentType?.includes("zip") &&
|
||||
!contentType?.includes("octet-stream")
|
||||
) {
|
||||
throw new Error(
|
||||
`Invalid content-type (${contentType}). Expected ZIP file`,
|
||||
);
|
||||
}
|
||||
|
||||
buffer = Buffer.from(await res.arrayBuffer());
|
||||
|
||||
if (buffer.length < 100) {
|
||||
throw new Error("Downloaded ZIP is empty or corrupted");
|
||||
}
|
||||
|
||||
if (buffer.toString("utf8", 0, 2) !== "PK") {
|
||||
throw new Error("Invalid ZIP signature (PK not found)");
|
||||
}
|
||||
|
||||
console.log(`✅ Downloaded ${(buffer.length / 1024 / 1024).toFixed(2)} MB`);
|
||||
} catch (err) {
|
||||
console.error("❌ Failed to download ZIP:", err);
|
||||
throw err;
|
||||
}
|
||||
|
||||
const buffer = Buffer.from(await res.arrayBuffer());
|
||||
if (buffer.length < 100 || buffer.toString("utf8", 0, 2) !== "PK") {
|
||||
throw new Error("Corrupted ZIP file");
|
||||
// Extract ZIP
|
||||
const extractDir = path.join(process.cwd(), "tmp_assets");
|
||||
await fs.rm(extractDir, { recursive: true, force: true });
|
||||
await fs.mkdir(extractDir, { recursive: true });
|
||||
|
||||
let zip: AdmZip;
|
||||
try {
|
||||
zip = new AdmZip(buffer);
|
||||
zip.extractAllTo(extractDir, true);
|
||||
console.log("✅ ZIP extracted successfully");
|
||||
} catch (err) {
|
||||
console.error("❌ Failed to extract ZIP:", err);
|
||||
throw err;
|
||||
}
|
||||
|
||||
/* ===== Extract ===== */
|
||||
await fs.rm(TMP_DIR, { recursive: true, force: true });
|
||||
await ensureDir(TMP_DIR);
|
||||
|
||||
const zip = new AdmZip(buffer);
|
||||
zip.extractAllTo(TMP_DIR, true);
|
||||
|
||||
/* ===== Process Files ===== */
|
||||
const files = await walkDir(TMP_DIR);
|
||||
const files = await walkDir(extractDir);
|
||||
console.log(`📦 Found ${files.length} files to process`);
|
||||
|
||||
// Process files
|
||||
for (const filePath of files) {
|
||||
const entryName = path.basename(filePath);
|
||||
const category = detectCategory(entryName);
|
||||
|
||||
let result;
|
||||
let finalName = entryName;
|
||||
let mimeType = "application/octet-stream";
|
||||
let targetPath = "";
|
||||
|
||||
if (category === "image") {
|
||||
result = await processImage(filePath, entryName);
|
||||
} else {
|
||||
result = await processNonImage(filePath, entryName, category);
|
||||
}
|
||||
try {
|
||||
if (category === "image") {
|
||||
const fileBaseName = path.parse(entryName).name;
|
||||
finalName = `${fileBaseName}.webp`;
|
||||
targetPath = path.join(UPLOADS_DIR, "images", finalName);
|
||||
|
||||
const { finalName, targetPath, mimeType } = result;
|
||||
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
||||
await sharp(filePath).webp({ quality: 80 }).toFile(targetPath);
|
||||
mimeType = "image/webp";
|
||||
} else if (category === "document") {
|
||||
targetPath = path.join(UPLOADS_DIR, "documents", entryName);
|
||||
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
||||
await fs.copyFile(filePath, targetPath);
|
||||
mimeType = "application/pdf";
|
||||
} else {
|
||||
targetPath = path.join(UPLOADS_DIR, "other", entryName);
|
||||
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
||||
await fs.copyFile(filePath, targetPath);
|
||||
}
|
||||
|
||||
const existing = await prisma.fileStorage.findUnique({
|
||||
where: { name: finalName },
|
||||
});
|
||||
|
||||
const data = {
|
||||
name: finalName,
|
||||
realName: entryName,
|
||||
path: targetPath,
|
||||
mimeType,
|
||||
link: `/uploads/${CATEGORY_DIR[category]}/${finalName}`,
|
||||
category,
|
||||
deletedAt: null,
|
||||
isActive: true,
|
||||
};
|
||||
|
||||
if (existing) {
|
||||
await prisma.fileStorage.update({
|
||||
// ✅ Upsert ke database
|
||||
await prisma.fileStorage.upsert({
|
||||
where: { name: finalName },
|
||||
data,
|
||||
update: {
|
||||
path: path.dirname(targetPath),
|
||||
realName: entryName,
|
||||
mimeType,
|
||||
link: `/api/fileStorage/findUnique/${finalName}`,
|
||||
category,
|
||||
deletedAt: null,
|
||||
isActive: true,
|
||||
},
|
||||
create: {
|
||||
name: finalName,
|
||||
realName: entryName,
|
||||
path: path.dirname(targetPath),
|
||||
mimeType,
|
||||
link: `/api/fileStorage/findUnique/${finalName}`,
|
||||
category,
|
||||
},
|
||||
});
|
||||
console.log(`♻️ restored: ${category}/${finalName}`);
|
||||
} else {
|
||||
await prisma.fileStorage.create({ data });
|
||||
console.log(`📂 created: ${category}/${finalName}`);
|
||||
|
||||
console.log(`✅ Processed: ${category}/${finalName}`);
|
||||
} catch (err) {
|
||||
console.error(`❌ Failed to process ${entryName}`, err);
|
||||
throw err; // ⛔ penting
|
||||
}
|
||||
}
|
||||
|
||||
/* ===== Cleanup ===== */
|
||||
await fs.rm(TMP_DIR, { recursive: true, force: true });
|
||||
|
||||
console.log("✅ Selesai seed assets!");
|
||||
// Cleanup
|
||||
await fs.rm(extractDir, { recursive: true, force: true });
|
||||
console.log("✅ Asset seeding completed!");
|
||||
}
|
||||
|
||||
/* ===== Auto Run ===== */
|
||||
if (import.meta.main) {
|
||||
seedAssets()
|
||||
.catch((err) => {
|
||||
|
||||
@@ -400,6 +400,42 @@ const kategoriBuku = proxy({
|
||||
}
|
||||
},
|
||||
},
|
||||
findManyAll: {
|
||||
data: [] as Prisma.KategoriBukuGetPayload<{
|
||||
omit: {
|
||||
isActive: true;
|
||||
};
|
||||
}>[],
|
||||
loading: false,
|
||||
search: "",
|
||||
load: async (search = "") => {
|
||||
// Change to arrow function
|
||||
kategoriBuku.findManyAll.loading = true; // Use the full path to access the property
|
||||
kategoriBuku.findManyAll.search = search;
|
||||
try {
|
||||
const query: any = { search };
|
||||
if (search) query.search = search;
|
||||
|
||||
const res = await ApiFetch.api.pendidikan.perpustakaandigital.kategoribuku[
|
||||
"findManyAll"
|
||||
].get({
|
||||
query,
|
||||
});
|
||||
|
||||
if (res.status === 200 && res.data?.success) {
|
||||
kategoriBuku.findManyAll.data = res.data.data || [];
|
||||
} else {
|
||||
console.error("Failed to load pegawai:", res.data?.message);
|
||||
kategoriBuku.findManyAll.data = [];
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error loading pegawai:", error);
|
||||
kategoriBuku.findManyAll.data = [];
|
||||
} finally {
|
||||
kategoriBuku.findManyAll.loading = false;
|
||||
}
|
||||
},
|
||||
},
|
||||
findUnique: {
|
||||
data: null as Prisma.KategoriBukuGetPayload<{
|
||||
omit: {
|
||||
|
||||
@@ -40,7 +40,7 @@ function EditPerpustakaanDigital() {
|
||||
|
||||
// Load kategori & data awal
|
||||
useEffect(() => {
|
||||
perpustakaanDigitalState.kategoriBuku.findMany.load();
|
||||
perpustakaanDigitalState.kategoriBuku.findManyAll.load();
|
||||
|
||||
const loadData = async () => {
|
||||
const id = Array.isArray(params?.id) ? params.id[0] : params?.id;
|
||||
|
||||
@@ -19,7 +19,7 @@ function CreateDataPerpustakaan() {
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
perpustakaanDigitalState.kategoriBuku.findMany.load();
|
||||
perpustakaanDigitalState.kategoriBuku.findManyAll.load();
|
||||
}, []);
|
||||
|
||||
const resetForm = () => {
|
||||
@@ -109,7 +109,7 @@ function CreateDataPerpustakaan() {
|
||||
placeholder='Pilih kategori'
|
||||
value={createState.create.form.kategoriId || ""}
|
||||
onChange={(val) => { createState.create.form.kategoriId = val ?? ""; }}
|
||||
data={perpustakaanDigitalState.kategoriBuku.findMany.data?.map((item) => ({
|
||||
data={perpustakaanDigitalState.kategoriBuku.findManyAll.data?.map((item) => ({
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
}))}
|
||||
|
||||
@@ -8,7 +8,8 @@ async function pengajarFindMany(context: Context) {
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
const search = (context.query.search as string) || "";
|
||||
const jenjangPendidikanName = (context.query.jenjangPendidikanId as string) || "";
|
||||
const jenjangPendidikanName =
|
||||
(context.query.jenjangPendidikanId as string) || "";
|
||||
|
||||
const where: any = { isActive: true };
|
||||
|
||||
@@ -19,17 +20,17 @@ async function pengajarFindMany(context: Context) {
|
||||
where: {
|
||||
nama: {
|
||||
equals: jenjangPendidikanName,
|
||||
mode: 'insensitive'
|
||||
mode: "insensitive",
|
||||
},
|
||||
isActive: true
|
||||
isActive: true,
|
||||
},
|
||||
orderBy: { nama: 'desc' },
|
||||
orderBy: { nama: "desc" },
|
||||
});
|
||||
|
||||
if (jenjangPendidikan) {
|
||||
where.lembaga = {
|
||||
...where.lembaga,
|
||||
jenjangId: jenjangPendidikan.id
|
||||
jenjangId: jenjangPendidikan.id,
|
||||
};
|
||||
} else {
|
||||
// Jika tidak ditemukan, return data kosong
|
||||
@@ -48,8 +49,8 @@ async function pengajarFindMany(context: Context) {
|
||||
// Add search condition if search term exists
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{ nama: { contains: search, mode: 'insensitive' } },
|
||||
{ lembaga: { nama: { contains: search, mode: 'insensitive' } } }
|
||||
{ nama: { contains: search, mode: "insensitive" } },
|
||||
{ lembaga: { nama: { contains: search, mode: "insensitive" } } },
|
||||
];
|
||||
}
|
||||
|
||||
@@ -59,17 +60,15 @@ async function pengajarFindMany(context: Context) {
|
||||
include: {
|
||||
lembaga: {
|
||||
include: {
|
||||
jenjangPendidikan: true
|
||||
}
|
||||
}
|
||||
jenjangPendidikan: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { nama: 'asc' },
|
||||
orderBy: [{ nama: "asc" }, { lembaga: { nama: "asc" } }],
|
||||
}),
|
||||
prisma.pengajar.count({
|
||||
where,
|
||||
})
|
||||
prisma.pengajar.count({ where }),
|
||||
]);
|
||||
|
||||
return {
|
||||
@@ -85,8 +84,8 @@ async function pengajarFindMany(context: Context) {
|
||||
console.error("Error in pengajarFindMany:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: `Failed fetch pengajar: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
||||
message: `Failed fetch pengajar: ${error instanceof Error ? error.message : "Unknown error"}`,
|
||||
};
|
||||
}
|
||||
}
|
||||
export default pengajarFindMany;
|
||||
export default pengajarFindMany;
|
||||
|
||||
@@ -8,7 +8,8 @@ async function siswaFindMany(context: Context) {
|
||||
const limit = Number(context.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
const search = (context.query.search as string) || "";
|
||||
const jenjangPendidikanName = (context.query.jenjangPendidikanName as string) || "";
|
||||
const jenjangPendidikanName =
|
||||
(context.query.jenjangPendidikanName as string) || "";
|
||||
|
||||
// Buat where clause
|
||||
const where: any = { isActive: true };
|
||||
@@ -20,16 +21,16 @@ async function siswaFindMany(context: Context) {
|
||||
where: {
|
||||
nama: {
|
||||
equals: jenjangPendidikanName,
|
||||
mode: 'insensitive'
|
||||
mode: "insensitive",
|
||||
},
|
||||
isActive: true,
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
if (jenjangPendidikan) {
|
||||
where.lembaga = {
|
||||
...where.lembaga,
|
||||
jenjangId: jenjangPendidikan.id
|
||||
jenjangId: jenjangPendidikan.id,
|
||||
};
|
||||
} else {
|
||||
// Jika tidak ditemukan, return data kosong
|
||||
@@ -48,8 +49,8 @@ async function siswaFindMany(context: Context) {
|
||||
// Add search functionality
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{ nama: { contains: search, mode: 'insensitive' } },
|
||||
{ lembaga: { nama: { contains: search, mode: 'insensitive' } } }
|
||||
{ nama: { contains: search, mode: "insensitive" } },
|
||||
{ lembaga: { nama: { contains: search, mode: "insensitive" } } },
|
||||
];
|
||||
}
|
||||
|
||||
@@ -65,15 +66,13 @@ async function siswaFindMany(context: Context) {
|
||||
},
|
||||
skip,
|
||||
take: limit,
|
||||
orderBy: { nama: 'asc' },
|
||||
orderBy: [{ nama: "asc" }, { lembaga: { nama: "asc" } }],
|
||||
}),
|
||||
prisma.siswa.count({
|
||||
where,
|
||||
})
|
||||
prisma.siswa.count({ where }),
|
||||
]);
|
||||
|
||||
console.log('Fetched siswa data count:', data.length);
|
||||
console.log('Total siswa count:', total);
|
||||
console.log("Fetched siswa data count:", data.length);
|
||||
console.log("Total siswa count:", total);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
@@ -88,7 +87,7 @@ async function siswaFindMany(context: Context) {
|
||||
console.error("Error in siswaFindMany:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: `Failed fetch siswa: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
||||
message: `Failed fetch siswa: ${error instanceof Error ? error.message : "Unknown error"}`,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import prisma from "@/lib/prisma";
|
||||
import { Context } from "elysia";
|
||||
|
||||
export default async function kategoriBukuFindManyAll(context: Context) {
|
||||
const search = (context.query.search as string) || "";
|
||||
const isActiveParam = context.query.isActive;
|
||||
|
||||
// Buat where clause dinamis
|
||||
const where: any = {};
|
||||
|
||||
if (isActiveParam !== undefined) {
|
||||
where.isActive = isActiveParam === "true";
|
||||
}
|
||||
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{ name: { contains: search, mode: "insensitive" } },
|
||||
];
|
||||
}
|
||||
|
||||
try {
|
||||
const data = await prisma.kategoriBuku.findMany({
|
||||
where,
|
||||
orderBy: { name: "asc" },
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Success fetch all kategori buku (non-paginated)",
|
||||
total: data.length,
|
||||
data,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Find many all error:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: "Failed fetch all kategori buku",
|
||||
total: 0,
|
||||
data: [],
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import kategoriBukuDelete from "./del";
|
||||
import kategoriBukuFindMany from "./findMany";
|
||||
import kategoriBukuFindUnique from "./findUnique";
|
||||
import kategoriBukuUpdate from "./updt";
|
||||
import kategoriBukuFindManyAll from "./findManyAll";
|
||||
|
||||
const KategoriBuku = new Elysia({
|
||||
prefix: "/kategoribuku",
|
||||
@@ -17,6 +18,7 @@ const KategoriBuku = new Elysia({
|
||||
})
|
||||
|
||||
.get("/findMany", kategoriBukuFindMany)
|
||||
.get("/findManyAll", kategoriBukuFindManyAll)
|
||||
.get("/:id", async (context) => {
|
||||
const response = await kategoriBukuFindUnique(
|
||||
new Request(context.request)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
'use client';
|
||||
|
||||
import stateGallery from '@/app/admin/(dashboard)/_state/desa/gallery';
|
||||
import colors from '@/con/colors';
|
||||
import {
|
||||
ActionIcon,
|
||||
Alert,
|
||||
Box,
|
||||
Button,
|
||||
@@ -15,12 +17,10 @@ import {
|
||||
Title,
|
||||
} from '@mantine/core';
|
||||
import { useShallowEffect } from '@mantine/hooks';
|
||||
import { IconArrowBack, IconInfoCircle, IconVideo } from '@tabler/icons-react';
|
||||
import { IconArrowBack, IconArrowLeft, IconInfoCircle, IconVideo } from '@tabler/icons-react';
|
||||
import { useParams, useRouter } from 'next/navigation';
|
||||
import { useState } from 'react';
|
||||
import { useProxy } from 'valtio/utils';
|
||||
import stateGallery from '@/app/admin/(dashboard)/_state/desa/gallery';
|
||||
import BackButton from '../../../layanan/_com/BackButto';
|
||||
|
||||
|
||||
function convertToEmbedUrl(youtubeUrl: string): string {
|
||||
@@ -95,7 +95,9 @@ export default function DetailVideoUser() {
|
||||
<Box py="xl" px={{ base: 'md', md: 100 }}>
|
||||
{/* Tombol Kembali */}
|
||||
<Box>
|
||||
<BackButton />
|
||||
<ActionIcon bg={colors["blue-button"]} onClick={() => router.push('/darmasaba/desa/galery/video')}>
|
||||
<IconArrowLeft />
|
||||
</ActionIcon>
|
||||
</Box>
|
||||
|
||||
{/* Header - Dijadikan Title */}
|
||||
|
||||
@@ -173,9 +173,9 @@ function Content({ kategoriBuku }: { kategoriBuku: string }) {
|
||||
</Box>
|
||||
<Center mt="lg">
|
||||
<Pagination
|
||||
total={totalPages}
|
||||
value={currentPage}
|
||||
onChange={handlePageChange}
|
||||
total={totalPages}
|
||||
color="blue"
|
||||
radius="md"
|
||||
/>
|
||||
|
||||
@@ -46,7 +46,7 @@ export default function LayoutTabs({
|
||||
|
||||
// 🟦 Ambil kategori buku saat mount
|
||||
useEffect(() => {
|
||||
perpustakaanDigitalState.kategoriBuku.findMany.load();
|
||||
perpustakaanDigitalState.kategoriBuku.findManyAll.load();
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -86,7 +86,7 @@ export default function LayoutTabs({
|
||||
|
||||
// 🟩 Tabs dinamis berdasarkan kategori dari state
|
||||
const kategoriTabs =
|
||||
snap.kategoriBuku.findMany.data?.map((item) => ({
|
||||
snap.kategoriBuku.findManyAll.data?.map((item) => ({
|
||||
label: item.name,
|
||||
value: item.name.toLowerCase().replace(/\s+/g, '-'),
|
||||
href: `/darmasaba/pendidikan/perpustakaan-digital/${encodeURIComponent(item.name.toLowerCase().replace(/\s+/g, '-'))}`,
|
||||
|
||||
51
xx.ts
51
xx.ts
@@ -1,4 +1,51 @@
|
||||
import 'colors'
|
||||
// // import {v4} from 'uuid'
|
||||
|
||||
// import prisma from "@/lib/prisma";
|
||||
|
||||
console.log("halo".blue)
|
||||
// // console.log(v4())
|
||||
|
||||
// const listNama = [
|
||||
// { name: "Adi Pratama", phone: "081234567801" },
|
||||
// { name: "Budi Santoso", phone: "081234567802" },
|
||||
// { name: "Citra Lestari", phone: "081234567803" },
|
||||
// { name: "Dewi Anggraini", phone: "081234567804" },
|
||||
// { name: "Eka Putra", phone: "081234567805" },
|
||||
// { name: "Fajar Nugroho", phone: "081234567806" },
|
||||
// { name: "Gita Maharani", phone: "081234567807" },
|
||||
// { name: "Hadi Wijaya", phone: "081234567808" },
|
||||
// { name: "Indah Purnama", phone: "081234567809" },
|
||||
// { name: "Joko Susilo", phone: "081234567810" },
|
||||
// { name: "Kartika Sari", phone: "081234567811" },
|
||||
// { name: "Lukman Hakim", phone: "081234567812" },
|
||||
// { name: "Maya Fitriani", phone: "081234567813" },
|
||||
// { name: "Nanda Saputra", phone: "081234567814" },
|
||||
// { name: "Oka Mahendra", phone: "081234567815" },
|
||||
// { name: "Putri Ayu", phone: "081234567816" },
|
||||
// { name: "Rizky Kurniawan", phone: "081234567817" },
|
||||
// { name: "Sari Wulandari", phone: "081234567818" },
|
||||
// { name: "Taufik Hidayat", phone: "081234567819" },
|
||||
// { name: "Yoga Prasetya", phone: "081234567820" },
|
||||
// ];
|
||||
|
||||
// (async () => {
|
||||
// for (const n of listNama) {
|
||||
// await prisma.percobaan.upsert({
|
||||
// create: {
|
||||
// nama: n.name,
|
||||
// phone: n.phone,
|
||||
// },
|
||||
// update: {
|
||||
// nama: n.name,
|
||||
// },
|
||||
// where: {
|
||||
// phone: n.phone,
|
||||
// },
|
||||
// });
|
||||
// }
|
||||
// })()
|
||||
// .then(() => {
|
||||
// console.log("success");
|
||||
// })
|
||||
// .catch((e) => {
|
||||
// console.log(e);
|
||||
// });
|
||||
|
||||
Reference in New Issue
Block a user