diff --git a/prisma/data/file-storage.json b/prisma/data/file-storage.json index a4aa1dec..34fe16f1 100644 --- a/prisma/data/file-storage.json +++ b/prisma/data/file-storage.json @@ -926,5 +926,194 @@ "mimeType": "image/webp", "link": "/api/fileStorage/findUnique/TDQReg1lQ73s39crXW0ra-desktop.webp", "category": "image" + }, + { + "id": "cmkao2zm90007vntzxqkjy5mt", + "name": "d6hJgycQawWN3VEcHaqtR-desktop.webp", + "realName": "puskesmas.png", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/d6hJgycQawWN3VEcHaqtR-desktop.webp", + "category": "image" + }, + { + "id": "cmkatoru10000vny38y0wxd6s", + "name": "cg78Sb_QzZFlli9s2FPVc-desktop.webp", + "realName": "puskesmas2.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/cg78Sb_QzZFlli9s2FPVc-desktop.webp", + "category": "image" + }, + { + "id": "cmkay1e590010vn6y24pgaa1r", + "name": "hLeF0GRFZqDUngZnDMAAk-desktop.webp", + "realName": "pk1.png", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/hLeF0GRFZqDUngZnDMAAk-desktop.webp", + "category": "image" + }, + { + "id": "cmkay6hob0011vn6ybjwejcej", + "name": "hyyTFi8EApjzFEZ9EvJgB-desktop.webp", + "realName": "pk2.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/hyyTFi8EApjzFEZ9EvJgB-desktop.webp", + "category": "image" + }, + { + "id": "cmkay8vmd0012vn6ylsk2vzfo", + "name": "l4qsUEw2JiclGAkkrXp9g-desktop.webp", + "realName": "pk3.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/l4qsUEw2JiclGAkkrXp9g-desktop.webp", + "category": "image" + }, + { + "id": "cmkayd8o90013vn6ye7n8805q", + "name": "Gc79mlIlGuoRQuTqskFj--desktop.webp", + "realName": "pk-4.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/Gc79mlIlGuoRQuTqskFj--desktop.webp", + "category": "image" + }, + { + "id": "cmkayi0x90016vn6ykddxqyq3", + "name": "OsMY3AYPyGC_CoN1xUjOn-desktop.webp", + "realName": "posyandu1.png", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/OsMY3AYPyGC_CoN1xUjOn-desktop.webp", + "category": "image" + }, + { + "id": "cmkaykipf0019vn6yknjno3k1", + "name": "M9QlgVKIEfCdY3g4F_tRZ-desktop.webp", + "realName": "pk6.png", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/M9QlgVKIEfCdY3g4F_tRZ-desktop.webp", + "category": "image" + }, + { + "id": "cmkayz2h8001cvn6yrb7uptjs", + "name": "Gi8EX3pBmT719AfzXirDS-desktop.webp", + "realName": "pd1.jpg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/Gi8EX3pBmT719AfzXirDS-desktop.webp", + "category": "image" + }, + { + "id": "cmkawq38m0009vn6yi7evbhap", + "name": "v7Ac2xQvTiJy-HYh1AxF4-desktop.webp", + "realName": "posko-siaga.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/v7Ac2xQvTiJy-HYh1AxF4-desktop.webp", + "category": "image" + }, + { + "id": "cmkawso29000cvn6y879ahra0", + "name": "jYxEXspWH5g6eTTVqK72c-desktop.webp", + "realName": "ambulance.jpg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/jYxEXspWH5g6eTTVqK72c-desktop.webp", + "category": "image" + }, + { + "id": "cmkawu7qj000fvn6yubhimyiv", + "name": "3tNQ9J8I3Ewq5H8CWuqvp-desktop.webp", + "realName": "penanganan darurat.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/3tNQ9J8I3Ewq5H8CWuqvp-desktop.webp", + "category": "image" + }, + { + "id": "cmkb6488i001fvn6ylkddch1j", + "name": "g4ICsRrmOaIqS_yqlQLZK-desktop.webp", + "realName": "puskesmas2.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/g4ICsRrmOaIqS_yqlQLZK-desktop.webp", + "category": "image" + }, + { + "id": "cmkb681og001gvn6ykb5uasln", + "name": "1NkzPzQailqE5yNOiUjB9-desktop.webp", + "realName": "puskesmas.png", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/1NkzPzQailqE5yNOiUjB9-desktop.webp", + "category": "image" + }, + { + "id": "cmkb6brrf0000vn14u8c7wnox", + "name": "NBPAqjPXn7GQmYTDBI5hu-desktop.webp", + "realName": "kd3.webp", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/NBPAqjPXn7GQmYTDBI5hu-desktop.webp", + "category": "image" + }, + { + "id": "cmkb6ehpi0001vn14hjp4tdye", + "name": "EcQIGOF6LW1dIKE53vmba-desktop.webp", + "realName": "kd4.jpeg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/EcQIGOF6LW1dIKE53vmba-desktop.webp", + "category": "image" + }, + { + "id": "cmkbynxxo0000vn67wi2nsyl3", + "name": "pps1ZgzJxDb4VZxEvtZeu-desktop.webp", + "realName": "infowp-1.jpg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/pps1ZgzJxDb4VZxEvtZeu-desktop.webp", + "category": "image" + }, + { + "id": "cmkbyr3mk0003vn673xrqv8xv", + "name": "JhJigMo269K1TFGzSB1OS-desktop.webp", + "realName": "infowp-2.jpg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/JhJigMo269K1TFGzSB1OS-desktop.webp", + "category": "image" + }, + { + "id": "cmkax3o8g000rvn6ygqpmo1nb", + "name": "5giLSHSnWEFoZoMEcjhL7-desktop.webp", + "realName": "diare.webp", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/5giLSHSnWEFoZoMEcjhL7-desktop.webp", + "category": "image" + }, + { + "id": "cmkax5ukz000uvn6yho3aj2nf", + "name": "3faPo-1wjhVDVU6S7S8sS-desktop.webp", + "realName": "tbc.png", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/3faPo-1wjhVDVU6S7S8sS-desktop.webp", + "category": "image" + }, + { + "id": "cmkax72nw000xvn6ymcuvlzom", + "name": "DyX82oztXbHfu6HEvbrpt-desktop.webp", + "realName": "dbd.jpg", + "path": "uploads/images", + "mimeType": "image/webp", + "link": "/api/fileStorage/findUnique/DyX82oztXbHfu6HEvbrpt-desktop.webp", + "category": "image" } ] diff --git a/prisma/data/kesehatan/infowabahpenyakit/infowabahpenyakit.json b/prisma/data/kesehatan/infowabahpenyakit/infowabahpenyakit.json new file mode 100644 index 00000000..cec9fc18 --- /dev/null +++ b/prisma/data/kesehatan/infowabahpenyakit/infowabahpenyakit.json @@ -0,0 +1,37 @@ +[ + { + "id": "cmkax3ptc000tvn6ytq1lpb2z", + "name": "Diare dan Kolera", + "deskripsiSingkat": "
Apa itu Diare dan Kolera penyebab, gejala dan cara penanganannya?
Yuk Kenali gelaja dan cara penanganan Diare dan Kolera yang efektif untuk melindungi keluarga anda.
", + "deskripsiLengkap": "Apa itu Diare dan Kolera penyebab, gejala dan cara penanganannya?
Yuk Kenali gelaja dan cara penanganan Diare dan Kolera yang efektif untuk melindungi keluarga anda.
Penyebab: Bakteri Vibrio cholerae (Kolera) atau Escherichia coli (diare) akibat makanan/minuman yang terkontaminasi.
Gejala: Buang air besar cair terus-menerus, dehidrasi, dan lemas. Pencegahan: Menjaga kebersihan makanan dan air, serta mencuci tangan dengan sabun.
Apa itu TBC penyebab, gejala dan cara penanganannya?
Yuk Kenali gelaja dan cara penanganan TBC yang efektif untuk melindungi keluarga anda.
", + "deskripsiLengkap": "Apa itu TBC penyebab, gejala dan cara penanganannya?
Yuk Kenali gelaja dan cara penanganan TBC yang efektif untuk melindungi keluarga anda.
Penyebab: Bakteri Mycobacterium tuberculosis yang menyebar melalui udara.
Gejala: Batuk lebih dari 2 minggu, berkeringat di malam hari, dan berat badan turun.
Pencegahan: Vaksin BCG, pola hidup sehat, dan pengobatan bagi penderita agar tidak menular.
", + "imageId": "cmkax5ukz000uvn6yho3aj2nf" + }, + { + "id": "cmkax72s7000zvn6yz3nmvrry", + "name": "Demam Berdarah Dengue (DBD)", + "deskripsiSingkat": "Yuk Kenali gelaja dan cara penanganan DBD yang efektif untuk melindungi keluarga anda selama musim hujan.
", + "deskripsiLengkap": "Apa itu DBD penyebab, gejala dan cara penanganannya?
Yuk Kenali gelaja dan cara penanganan DBD yang efektif untuk melindungi keluarga anda selama musim hujan.
Penyebab: Virus dengue yang ditularkan oleh nyamuk Aedes aegypti.
Gejala: Demam tinggi, nyeri sendi, ruam kulit, dan pendarahan ringan.
Pencegahan: Menguras tempat air, menutup wadah air, fogging, dan menggunakan lotion anti-nyamuk.
", + "imageId": "cmkax72nw000xvn6ymcuvlzom" + }, + { + "id": "cmkbyny4f0002vn67kmjmjrpl", + "name": "Fogging sebagai Pencegah DBD di Br. Umahanyar Desa Darmasaba", + "deskripsiSingkat": "Pemerintah Desa Darmasaba melaksanakan fogging di wilayah Br. Umahanyar sebagai upaya pencegahan DBD di Desa Darmasaba.
", + "deskripsiLengkap": "Pemerintah Desa Darmasaba melaksanakan fogging (pengasapan) di wilayah Br. Umahanyar Desa Darmasaba Kecamatan Abiansemal Kabupaten Badung dari tanggal 12 sampai dengan 13 April 2023.
Fogging ini merupakan salah satu metode yang dilakukan oleh Pemdes Darmasaba dalam pencegahan penyakit Demam Berdarah Dengue (DBD) dengan menargetkan nyamuk Aedes aegypti sebagai vektor penyebabnya.
", + "imageId": "cmkbynxxo0000vn67wi2nsyl3" + }, + { + "id": "cmkbyr3rx0005vn674uhycsxc", + "name": "Gerakan Serentak Penyemprotan Pencegahan PMK di Desa Darmasaba", + "deskripsiSingkat": "Penyemprotan serentak dilakukan di Desa Darmasaba untuk mencegah Penyakit Mulut dan Kaki (PMK) pada hewan ternak.
", + "deskripsiLengkap": "Setelah dilakukan vaksinasi Penyakit Mulut dan Kaki (PMK) pada hewan ternak yaitu sapi di wilayah Desa Darmasaba, Pemerintah Desa Darmasaba melaksanakan gerakan serentak penyemprotan pencegahan PMK pada hari Rabu (20/7/2022) di seputaran wilayah Desa Darmasaba.
Upaya ini dilakukan sebagai bentuk pencegahan terhadap penyebaran PMK dan menjaga kesehatan hewan ternak di desa.
", + "imageId": "cmkbyr3mk0003vn673xrqv8xv" + } +] diff --git a/prisma/data/kesehatan/kontak-darurat/kontak-darurat.json b/prisma/data/kesehatan/kontak-darurat/kontak-darurat.json new file mode 100644 index 00000000..3c1477b8 --- /dev/null +++ b/prisma/data/kesehatan/kontak-darurat/kontak-darurat.json @@ -0,0 +1,30 @@ +[ + { + "id": "cmkax1vks000qvn6yyxuvfsi8", + "name": "Puskesmas Pembantu Darmasaba", + "deskripsi": "Puskesmas Pembantu Darmasaba merupakan fasilitas kesehatan tingkat pertama yang berada di Desa Darmasaba, melayani berbagai layanan kesehatan masyarakat termasuk pemeriksaan umum dan imunisasi.
", + "imageId": "cmkb6488i001fvn6ylkddch1j", + "whatsapp": "089647037430" + }, + { + "id": "cmkawzrvg000nvn6ywyx529em", + "name": "UPTD Puskesmas Abiansemal III (melayani Darmasaba)", + "deskripsi": "Puskesmas Abiansemal III adalah fasilitas kesehatan utama di kecamatan Abiansemal yang melayani wilayah Desa Darmasaba dan sekitarnya. Puskesmas ini memiliki layanan 24 jam serta pelayanan darurat kesehatan dasar.
", + "imageId": "cmkb681og001gvn6ykb5uasln", + "whatsapp": "03618463263" + }, + { + "id": "cmkawy5in000kvn6yza82pkkg", + "name": "UPTD Puskesmas Abiansemal I", + "deskripsi": "Puskesmas Abiansemal I melayani masyarakat di wilayah kecamatan Abiansemal, termasuk pelayanan kesehatan darurat dan program kesehatan masyarakat.
", + "imageId": "cmkb6brrf0000vn14u8c7wnox", + "whatsapp": "087858367111" + }, + { + "id": "cmkb6ehu20003vn14ca4xr057", + "name": "Kantor Desa Darmasaba (Kontak Informasi Kesehatan)", + "deskripsi": "Kantor Pemerintahan Desa Darmasaba dapat menjadi saluran kontak awal untuk rujukan layanan kesehatan darurat atau informasi lebih lanjut mengenai fasilitas kesehatan di wilayah desa.
", + "imageId": "cmkb6ehpi0001vn14hjp4tdye", + "whatsapp": "081239580000" + } +] diff --git a/prisma/data/kesehatan/penanganan-darurat/penganan-darurat.json b/prisma/data/kesehatan/penanganan-darurat/penganan-darurat.json new file mode 100644 index 00000000..4b594959 --- /dev/null +++ b/prisma/data/kesehatan/penanganan-darurat/penganan-darurat.json @@ -0,0 +1,26 @@ +[ + { + "id": "cmkawso7y000evn6ygob15cqb", + "name": "Rembug Stunting di Desa Darmasaba", + "deskripsi": "Pemerintah Desa Darmasaba melaksanakan kegiatan rembug stunting dengan melibatkan bidan desa, kader posyandu, dan tokoh masyarakat. Tujuan kegiatan ini adalah untuk memperkuat upaya pencegahan kekerdilan (stunting) melalui koordinasi layanan kesehatan, edukasi gizi, serta percepatan penanganan gizi buruk di lingkungan desa sebagai bagian dari respons terhadap kondisi kesehatan yang mendesak.
", + "imageId": "cmkayz2h8001cvn6yrb7uptjs" + }, + { + "id": "cmkawq3ef000bvn6y387vub0y", + "name": "Posko Kesehatan Darurat dan Bencana", + "deskripsi": "Posko Kesehatan Darurat dan Bencana Desa Darmasaba dibentuk sebagai pusat koordinasi dan pertolongan bagi warga yang terdampak situasi darurat seperti banjir, tanah longsor, atau wabah penyakit. Posko ini dilengkapi dengan tenaga medis, obat-obatan dasar, serta dukungan logistik untuk memastikan penanganan cepat dan tepat sasaran. Kegiatan ini juga melibatkan kader kesehatan desa dan karang taruna sebagai relawan lapangan.
", + "imageId": "cmkawq38m0009vn6yi7evbhap" + }, + { + "id": "cmkawso7y000evn6ygob14bpa", + "name": "Layanan Ambulans Desa Darmasaba", + "deskripsi": "Layanan Ambulans Desa Darmasaba disiapkan untuk membantu masyarakat yang membutuhkan transportasi medis darurat ke fasilitas kesehatan terdekat. Layanan ini beroperasi 24 jam dan dapat dihubungi melalui nomor darurat desa. Tim ambulans terdiri dari relawan terlatih dan tenaga medis yang siap memberikan pertolongan pertama di lokasi kejadian sebelum dirujuk ke rumah sakit atau puskesmas.
", + "imageId": "cmkawso29000cvn6y879ahra0" + }, + { + "id": "cmkawu7te000hvn6yh3pdnv4w", + "name": "Penanganan Darurat Sosial & Kesehatan Desa Darmasaba", + "deskripsi": "Program Penanganan Darurat Sosial & Kesehatan Desa Darmasaba bertujuan memberikan respon cepat terhadap situasi darurat seperti warga sakit mendadak, kecelakaan, bencana alam, maupun kondisi sosial yang membutuhkan bantuan segera. Tim Siaga Desa Darmasaba berkoordinasi dengan Puskesmas Abiansemal dan BPBD untuk memastikan penanganan yang cepat, tepat, dan manusiawi. Program ini juga mencakup layanan ambulans desa, posko kesehatan darurat, serta bantuan logistik bagi warga terdampak.
", + "imageId": "cmkawu7qj000fvn6yubhimyiv" + } +] diff --git a/prisma/data/kesehatan/program-kesehatan/program-kesehatan.json b/prisma/data/kesehatan/program-kesehatan/program-kesehatan.json new file mode 100644 index 00000000..8234f506 --- /dev/null +++ b/prisma/data/kesehatan/program-kesehatan/program-kesehatan.json @@ -0,0 +1,44 @@ +[ + { + "id": "cmkawkji50002vn6yzyrlqhh1", + "name": "Gerakan Kulkul PKK dan Posyandu Desa Darmasaba", + "deskripsiSingkat": "Kegiatan bersama PKK dan Posyandu untuk meningkatkan pelayanan kesehatan masyarakat.
", + "deskripsi": "Pada hari Minggu, 11 Januari 2025, Pemerintah Desa Darmasaba melalui TP PKK dan TP Posyandu melaksanakan kegiatan Gerakan Kulkul PKK dan Posyandu yang berlangsung serentak di seluruh wilayah Desa Darmasaba untuk memperkuat pelayanan kesehatan dasar dan peningkatan partisipasi masyarakat dalam program Posyandu.
", + "imageId": "cmkay1e590010vn6y24pgaa1r" + }, + { + "id": "cmkawmlg40005vn6yja2xiev0", + "name": "Pendampingan Kunjungan Rumah oleh Puskesmas Abiansemal 3", + "deskripsiSingkat": "Pendataan kesehatan penyandang disabilitas lewat kunjungan rumah di Desa Darmasaba.
", + "deskripsi": "Pemerintah Desa Darmasaba bersama Kelian Banjar Dinas dan kader kesehatan mendampingi kegiatan kunjungan rumah yang dilaksanakan oleh Puskesmas Abiansemal 3 pada 21 Juli 2025, difokuskan pada pendataan dan pemantauan kondisi kesehatan penyandang disabilitas di Banjar Bersih, Desa Darmasaba.
", + "imageId": "cmkay6hob0011vn6ybjwejcej" + }, + { + "id": "cmkawnr9k0008vn6ymwv0foiv", + "name": "Kegiatan Aksi Sosial Tim Penggerak Posyandu Provinsi Bali di Desa Darmasaba", + "deskripsiSingkat": "Aksi sosial TP Posyandu Bali untuk memperkuat pelayanan posyandu di desa.
", + "deskripsi": "Pada 10 Desember 2025, Desa Darmasaba menjadi lokasi pelaksanaan Aksi Sosial Tim Penggerak Posyandu Provinsi Bali yang bertujuan memperkuat pelayanan Posyandu serta meningkatkan kesejahteraan masyarakat, khususnya keluarga dan balita.
", + "imageId": "cmkay8vmd0012vn6ylsk2vzfo" + }, + { + "id": "cmkawnr9k0008vn6ymwv0dpjw", + "name": "Inovasi BAJRA dalam Penanggulangan Rabies", + "deskripsiSingkat": "Program BAJRA untuk penanggulangan rabies di Desa Darmasaba.
", + "deskripsi": "Desa Darmasaba mengembangkan inovasi BAJRA (Bersama Jaga Rabies), sebuah program berbasis komunitas untuk penanggulangan rabies yang mengintegrasikan pelaporan cepat masyarakat, edukasi berkelanjutan dan koordinasi lintas sektor antara kesehatan hewan, manusia, dan pemerintahan desa.
", + "imageId": "cmkayd8o90013vn6ye7n8805q" + }, + { + "id": "cmkawnr9k0008vn6ymwv0eqkx", + "name": "Posyandu Pudak Amara Berkompetisi", + "deskripsiSingkat": "Partisipasi Posyandu Pudak Amara dalam lomba prestasi Posyandu tingkat provinsi.
", + "deskripsi": "Kader Posyandu Pudak Amara Br. Cabe mendapat pendampingan dari Perbekel Darmasaba, Dinas Kesehatan Kab. Badung, Puskesmas Abiansemal III, dan Pustu Desa Darmasaba dalam ajang lomba kader dan Posyandu berprestasi tingkat Provinsi Bali tahun 2025.
", + "imageId": "cmkayi0x90016vn6ykddxqyq3" + }, + { + "id": "cmkawnr9k0008vn6ymwv1frly", + "name": "Outbound Kader Posyandu Darmasaba", + "deskripsiSingkat": "Program pembinaan dan pengembangan kapasitas kader Posyandu.
", + "deskripsi": "Pemdes Darmasaba melaksanakan kegiatan Outbound Posyandu untuk meningkatkan kapasitas dan wawasan Kader Posyandu se-Desa Darmasaba sebagai bagian dari upaya peningkatan kualitas pelayanan kesehatan dasar di masyarakat.
", + "imageId": "cmkaykipf0019vn6yknjno3k1" + } +] diff --git a/prisma/data/kesehatan/puskesmas/jam-puskesmas/jam.json b/prisma/data/kesehatan/puskesmas/jam-puskesmas/jam.json new file mode 100644 index 00000000..b59aa3e6 --- /dev/null +++ b/prisma/data/kesehatan/puskesmas/jam-puskesmas/jam.json @@ -0,0 +1,14 @@ +[ + { + "id": "cmkao2zwx0008vntzmvqdsdzo", + "workDays": "09:00", + "weekDays": "17:00", + "holiday": "08:00 - 16:00" + }, + { + "id": "cmkao2zwx0008vntzmvqdseal", + "workDays": "08:00", + "weekDays": "12:00", + "holiday": "–" + } +] diff --git a/prisma/data/kesehatan/puskesmas/kontak-puskesmas/kontak.json b/prisma/data/kesehatan/puskesmas/kontak-puskesmas/kontak.json new file mode 100644 index 00000000..df7263ae --- /dev/null +++ b/prisma/data/kesehatan/puskesmas/kontak-puskesmas/kontak.json @@ -0,0 +1,16 @@ +[ + { + "id": "cmkao2zxc0009vntz00kev051", + "kontakPuskesmas": "(0361) 8463263", + "email": "puskesmas@gmail.com", + "facebook": "puskesmas@gmail.com", + "kontakUGD": "(0361) 8463263" + }, + { + "id": "cmkao2zxc0009vntz00kev162", + "kontakPuskesmas": "–", + "email": "–", + "facebook": "–", + "kontakUGD": "–" + } +] diff --git a/prisma/data/kesehatan/puskesmas/puskesmas.json b/prisma/data/kesehatan/puskesmas/puskesmas.json new file mode 100644 index 00000000..6599996d --- /dev/null +++ b/prisma/data/kesehatan/puskesmas/puskesmas.json @@ -0,0 +1,18 @@ +[ + { + "id": "cmkao2zxk000bvntzbavkbg6p", + "name": "Puskesmas Abiansemal III", + "alamat": "Jl. Ratna, Sibang Kaja, Abiansemal, Badung, Bali 80352", + "jamId": "cmkao2zwx0008vntzmvqdsdzo", + "imageId": "cmkao2zm90007vntzxqkjy5mt", + "kontakId": "cmkao2zxc0009vntz00kev051" + }, + { + "id": "cmkao2zxk000bvntzbavkbh7q", + "name": "Puskesmas Pembantu Darmasaba", + "alamat": "Desa Darmasaba, Kecamatan Abiansemal, Kabupaten Badung, Bali", + "jamId": "cmkao2zwx0008vntzmvqdseal", + "imageId": "cmkatoru10000vny38y0wxd6s", + "kontakId": "cmkao2zxc0009vntz00kev162" + } +] diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 03172f31..dcdcf5e1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1118,8 +1118,8 @@ model Posyandu { nomor String deskripsi String jadwalPelayanan String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime @default(now()) @@ -1133,12 +1133,12 @@ model Puskesmas { alamat String jam JamOperasional @relation(fields: [jamId], references: [id]) jamId String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? kontak KontakPuskesmas @relation(fields: [kontakId], references: [id]) kontakId String createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + updatedAt DateTime @updatedAt deletedAt DateTime @default(now()) isActive Boolean @default(true) } @@ -1174,8 +1174,8 @@ model ProgramKesehatan { name String deskripsiSingkat String deskripsi String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime @default(now()) @@ -1187,8 +1187,8 @@ model PenangananDarurat { id String @id @default(cuid()) name String deskripsi String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime @default(now()) @@ -1200,8 +1200,8 @@ model KontakDarurat { id String @id @default(cuid()) name String deskripsi String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? whatsapp String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -1215,8 +1215,8 @@ model InfoWabahPenyakit { name String deskripsiSingkat String deskripsiLengkap String - image FileStorage @relation(fields: [imageId], references: [id]) - imageId String + image FileStorage? @relation(fields: [imageId], references: [id]) + imageId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime @default(now()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 892a067f..e9026cd7 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -26,7 +26,7 @@ import pelayananPerizinanBerusaha from "./data/desa/layanan/pelayananPerizinanBe import pelayananSuratKeterangan from "./data/desa/layanan/pelayananSuratKeterangan.json"; import pelayananTelunjukSaktiDesa from "./data/desa/layanan/pelayananTelunjukSaktiDesa.json"; import pelayananPendudukNonPermanen from "./data/desa/layanan/pelayanaPendudukNonPermanen.json"; -import penghargaan from "./data/desa/penghargaan/penghargaan.json" +import penghargaan from "./data/desa/penghargaan/penghargaan.json"; import lambangDesa from "./data/desa/profile/lambang_desa.json"; import maskotDesa from "./data/desa/profile/maskot_desa.json"; import profilPerbekel from "./data/desa/profile/profil_perbekel.json"; @@ -37,6 +37,14 @@ import detailDataPengangguran from "./data/ekonomi/jumlah-pengangguran/detail-da import kategoriProduk from "./data/ekonomi/pasar-desa/kategori-produk.json"; import pegawai from "./data/ekonomi/struktur-organisasi/pegawai-bumdes.json"; import posisiOrganisasi from "./data/ekonomi/struktur-organisasi/posisi-organisasi-bumdes.json"; +import posyandu from "./data/kesehatan/posyandu/posyandu.json"; +import kontakPuskesmas from "./data/kesehatan/puskesmas/kontak-puskesmas/kontak.json" +import jamPuskesmas from "./data/kesehatan/puskesmas/jam-puskesmas/jam.json" +import puskesmas from "./data/kesehatan/puskesmas/puskesmas.json"; +import programKesehatan from "./data/kesehatan/program-kesehatan/program-kesehatan.json" +import penangananDarurat from "./data/kesehatan/penanganan-darurat/penganan-darurat.json" +import kontakDarurat from "./data/kesehatan/kontak-darurat/kontak-darurat.json" +import infoWabahPenyakit from "./data/kesehatan/infowabahpenyakit/infowabahpenyakit.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"; @@ -346,200 +354,6 @@ import resolveImageById from "./resolveImageByName"; } console.log("desa anti korupsi success ..."); - // =========== KATEGORI PRESTASI DESA=========== - for (const c of kategoriPrestasiDesa) { - await prisma.kategoriPrestasiDesa.upsert({ - where: { id: c.id }, - update: { - name: c.name, - }, - create: { - id: c.id, - name: c.name, - }, - }); - } - console.log("kategori prestasi desa success ..."); - - // =========== PRESTASI DESA=========== - for (const p of prestasiDesa) { - await prisma.prestasiDesa.upsert({ - where: { id: p.id }, - update: { - name: p.name, - deskripsi: p.deskripsi, - kategoriId: p.kategoriId, - }, - create: { - id: p.id, - name: p.name, - deskripsi: p.deskripsi, - kategoriId: p.kategoriId, - }, - }); - } - console.log("prestasi desa success ..."); - - // =========== PENGHARGAAN =========== - console.log("🔄 Seeding Penghargaan..."); - for (const p of penghargaan) { - const existing = await prisma.penghargaan.findUnique({ - where: { id: p.id }, - select: { imageId: true }, - }); - - let imageId = existing?.imageId; // Pertahankan existing - - // Kalau belum ada imageId, cari berdasarkan name/realName - if (!imageId && p.imageId) { - // ✅ Cari langsung berdasarkan ID yang ada di p.imageId - const fileRecord = await prisma.fileStorage.findUnique({ - where: { id: p.imageId }, - select: { id: true, name: true }, - }); - - if (fileRecord) { - imageId = fileRecord.id; - console.log( - `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` - ); - } else { - console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); - imageId = null; - } - } - - await prisma.penghargaan.upsert({ - where: { id: p.id }, - update: { - name: p.name, - juara: p.juara, - deskripsi: p.deskripsi, - imageId, - }, - create: { - id: p.id, - name: p.name, - juara: p.juara, - deskripsi: p.deskripsi, - imageId, - }, - }); - } - console.log("penghargaan success ..."); - - // =========== LAYANAN DESA =========== - console.log("🔄 Seeding Pelayanan Surat Keterangan..."); - - for (const p of pelayananSuratKeterangan) { - const existing = await prisma.pelayananSuratKeterangan.findUnique({ - where: { id: p.id }, - select: { imageId: true, image2Id: true }, // 📌 tambahkan image2Id - }); - - // 1️⃣ Handle imageId - let imageId = existing?.imageId ?? null; - - if (!imageId && p.image) { - imageId = await resolveImageById(p.image); - - if (imageId) { - console.log(`✅ Image resolved for "${p.name}" → ${p.image}`); - } else { - console.warn(`⚠️ Image not resolved for "${p.name}" → ${p.image}`); - } - } - - // 2️⃣ Handle image2Id - let image2Id = existing?.image2Id ?? null; - - if (!image2Id && p.image2) { - image2Id = await resolveImageById(p.image2); - - if (image2Id) { - console.log(`✅ Image2 resolved for "${p.name}" → ${p.image2}`); - } else { - console.warn(`⚠️ Image2 not resolved for "${p.name}" → ${p.image2}`); - } - } - - // 3️⃣ Upsert dengan kedua image - await prisma.pelayananSuratKeterangan.upsert({ - where: { id: p.id }, - update: { - name: p.name, - deskripsi: p.deskripsi, - imageId, - image2Id, // 📌 tambahkan ini - }, - create: { - id: p.id, - name: p.name, - deskripsi: p.deskripsi, - imageId, - image2Id, // 📌 tambahkan ini - }, - }); - } - console.log("✅ Pelayanan Surat Keterangan success..."); - - for (const p of pelayananTelunjukSaktiDesa) { - await prisma.pelayananTelunjukSaktiDesa.upsert({ - where: { id: p.id }, - update: { - name: p.name, - deskripsi: p.deskripsi, - link: p.link, - }, - create: { - id: p.id, - name: p.name, - deskripsi: p.deskripsi, - link: p.link, - }, - }); - } - console.log("pelayanan telunjuk sakti desa success ..."); - - for (const l of pelayananPerizinanBerusaha) { - await prisma.pelayananPerizinanBerusaha.upsert({ - where: { - id: l.id, - }, - update: { - name: l.name, - deskripsi: l.deskripsi, - link: l.link, - }, - create: { - id: l.id, - name: l.name, - deskripsi: l.deskripsi, - link: l.link, - }, - }); - } - - console.log("pelayanan perizinan berusaha success ..."); - - for (const l of pelayananPendudukNonPermanen) { - await prisma.pelayananPendudukNonPermanen.upsert({ - where: { - id: l.id, - }, - update: { - name: l.name, - deskripsi: l.deskripsi, - }, - create: { - id: l.id, - name: l.name, - deskripsi: l.deskripsi, - }, - }); - } - console.log("pelayanan penduduk non permanen success ..."); - // =========== SDGSDesa =========== console.log("🔄 Seeding SDGS Desa..."); for (const l of sdgsDesa) { @@ -603,7 +417,291 @@ import resolveImageById from "./resolveImageByName"; }); } - console.log("sdgs desa success ..."); + console.log("apbdes success ..."); + + // =========== KATEGORI PRESTASI DESA=========== + for (const c of kategoriPrestasiDesa) { + await prisma.kategoriPrestasiDesa.upsert({ + where: { id: c.id }, + update: { + name: c.name, + }, + create: { + id: c.id, + name: c.name, + }, + }); + } + console.log("kategori prestasi desa success ..."); + + // =========== PRESTASI DESA=========== + for (const p of prestasiDesa) { + await prisma.prestasiDesa.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsi: p.deskripsi, + kategoriId: p.kategoriId, + }, + create: { + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + kategoriId: p.kategoriId, + }, + }); + } + console.log("prestasi desa success ..."); + + // =========== MENU PPID =========== + // =========== SUBMENU PROFILE PPID =========== + for (const c of profilePPID) { + await prisma.profilePPID.upsert({ + where: { id: c.id }, + update: { + name: c.name, + biodata: c.biodata, + riwayat: c.riwayat, + pengalaman: c.pengalaman, + unggulan: c.unggulan, + // imageId tidak di-update + }, + create: { + id: c.id, + name: c.name, + biodata: c.biodata, + riwayat: c.riwayat, + pengalaman: c.pengalaman, + unggulan: c.unggulan, + // imageId tidak di-create + }, + }); + } + console.log("✅ profilePPID seeded without imageId (editable later via UI)"); + + // =========== SUBMENU STRUKTUR PPID =========== + // =========== POSISI ORGANISASI PPID =========== + + const flattenedPosisi = posisiOrganisasiPPID.flat(); + + // ✅ Urutkan berdasarkan hierarki + const sortedPosisi = flattenedPosisi.sort((a, b) => a.hierarki - b.hierarki); + + for (const p of sortedPosisi) { + console.log(`Seeding: ${p.nama} (id: ${p.id}, parent: ${p.parentId})`); + + if (p.parentId) { + const parentExists = flattenedPosisi.some((pos) => pos.id === p.parentId); + if (!parentExists) { + console.warn( + `⚠️ Parent tidak ditemukan: ${p.parentId} untuk ${p.nama}` + ); + continue; + } + } + + await prisma.posisiOrganisasiPPID.upsert({ + where: { id: p.id }, + update: p, + create: p, + }); + } + console.log("posisi organisasi berhasil"); + + // =========== PEGAWAI PPID =========== + console.log("🔄 Seeding pegawai PPID..."); + const flattenedPegawai = pegawaiPPID.flat(); + + // Check for duplicate emails + const emails = new Set(); + for (const p of flattenedPegawai) { + if (emails.has(p.email)) { + console.warn(`⚠️ Duplicate email found in pegawaiPPID: ${p.email}`); + } + emails.add(p.email); + } + + for (const p of flattenedPegawai) { + try { + await prisma.pegawaiPPID.upsert({ + where: { id: p.id }, + update: p, + create: p, + }); + console.log(`✅ Seeded pegawai PPID -> ${p.namaLengkap}`); + } catch (error: any) { + if (error.code === "P2002") { + console.warn( + `⚠️ Pegawai PPID with duplicate email (skipping): ${p.email}` + ); + } else { + console.error( + `❌ Failed to seed pegawai PPID ${p.namaLengkap}:`, + error.message + ); + } + } + } + console.log("✅ pegawai PPID seeding completed"); + + // =========== SUBMENU VISI MISI PPID =========== + + for (const v of visiMisiPPID) { + await prisma.visiMisiPPID.upsert({ + where: { + id: v.id, + }, + update: { + misi: v.misi, + visi: v.visi, + }, + create: { + id: v.id, + misi: v.misi, + visi: v.visi, + }, + }); + } + console.log("visi misi PPID success ..."); + + // =========== SUBMENU DASAR HUKUM PPID =========== + for (const v of dasarHukumPPID) { + await prisma.dasarHukumPPID.upsert({ + where: { + id: v.id, + }, + update: { + judul: v.judul, + content: v.content, + }, + create: { + id: v.id, + judul: v.judul, + content: v.content, + }, + }); + } + console.log("dasar hukum PPID success ..."); + + // =========== SUBMENU DAFTAR INFORMASI PUBLIK PPID =========== + for (const v of daftarInformasiPublik) { + // Convert string date to Date object + const tanggal = new Date(v.tanggal); + + await prisma.daftarInformasiPublik.upsert({ + where: { + id: v.id, + }, + update: { + jenisInformasi: v.jenisInformasi, + deskripsi: v.deskripsi, + tanggal: tanggal, + }, + create: { + id: v.id, + jenisInformasi: v.jenisInformasi, + deskripsi: v.deskripsi, + tanggal: tanggal, + }, + }); + } + console.log("daftar informasi publik PPID success ..."); + + // =========== SUBMENU PERMOHONAN INFORMASI PUBLIK =========== + + for (const j of jenisInformasiDiminta) { + await prisma.jenisInformasiDiminta.upsert({ + where: { + name: j.name, + }, + update: { + name: j.name, + }, + create: { + name: j.name, + }, + }); + } + console.log("jenis informasi diminta success ..."); + + for (const c of caraMemperolehInformasi) { + await prisma.caraMemperolehInformasi.upsert({ + where: { + name: c.name, + }, + update: { + name: c.name, + }, + create: { + name: c.name, + }, + }); + } + console.log("cara memperoleh informasi success ..."); + + for (const c of caraMemperolehSalinanInformasi) { + await prisma.caraMemperolehSalinanInformasi.upsert({ + where: { + name: c.name, + }, + update: { + name: c.name, + }, + create: { + name: c.name, + }, + }); + } + console.log("cara memperoleh salinan informasi success ..."); + + // =========== SUBMENU INDEKS KEPUASAN MASYARAKAT =========== + for (const j of jenisKelamin) { + await prisma.jenisKelaminResponden.upsert({ + where: { + id: j.id, + }, + update: { + name: j.name, + }, + create: { + id: j.id, + name: j.name, + }, + }); + } + console.log("jenis kelamin responden success ..."); + + for (const r of pilihanRatingResponden) { + await prisma.pilihanRatingResponden.upsert({ + where: { + id: r.id, + }, + update: { + name: r.name, + }, + create: { + id: r.id, + name: r.name, + }, + }); + } + console.log("pilihan rating responden success ..."); + + for (const u of umurResponden) { + await prisma.umurResponden.upsert({ + where: { + id: u.id, + }, + update: { + name: u.name, + }, + create: { + id: u.id, + name: u.name, + }, + }); + } + console.log("umur responden success ..."); // =========== MENU DESA =========== // =========== SUBMENU PROFILE =========== @@ -783,160 +881,8 @@ import resolveImageById from "./resolveImageByName"; console.log("visi misi desa success ..."); - // =========== MENU PPID =========== - // =========== SUBMENU PROFILE PPID =========== - for (const c of profilePPID) { - await prisma.profilePPID.upsert({ - where: { id: c.id }, - update: { - name: c.name, - biodata: c.biodata, - riwayat: c.riwayat, - pengalaman: c.pengalaman, - unggulan: c.unggulan, - // imageId tidak di-update - }, - create: { - id: c.id, - name: c.name, - biodata: c.biodata, - riwayat: c.riwayat, - pengalaman: c.pengalaman, - unggulan: c.unggulan, - // imageId tidak di-create - }, - }); - } - console.log("✅ profilePPID seeded without imageId (editable later via UI)"); - - // =========== SUBMENU STRUKTUR PPID =========== - // =========== POSISI ORGANISASI PPID =========== - - const flattenedPosisi = posisiOrganisasiPPID.flat(); - - // ✅ Urutkan berdasarkan hierarki - const sortedPosisi = flattenedPosisi.sort((a, b) => a.hierarki - b.hierarki); - - for (const p of sortedPosisi) { - console.log(`Seeding: ${p.nama} (id: ${p.id}, parent: ${p.parentId})`); - - if (p.parentId) { - const parentExists = flattenedPosisi.some((pos) => pos.id === p.parentId); - if (!parentExists) { - console.warn( - `⚠️ Parent tidak ditemukan: ${p.parentId} untuk ${p.nama}` - ); - continue; - } - } - - await prisma.posisiOrganisasiPPID.upsert({ - where: { id: p.id }, - update: p, - create: p, - }); - } - console.log("posisi organisasi berhasil"); - - // =========== PEGAWAI PPID =========== - console.log("🔄 Seeding pegawai PPID..."); - const flattenedPegawai = pegawaiPPID.flat(); - - // Check for duplicate emails - const emails = new Set(); - for (const p of flattenedPegawai) { - if (emails.has(p.email)) { - console.warn(`⚠️ Duplicate email found in pegawaiPPID: ${p.email}`); - } - emails.add(p.email); - } - - for (const p of flattenedPegawai) { - try { - await prisma.pegawaiPPID.upsert({ - where: { id: p.id }, - update: p, - create: p, - }); - console.log(`✅ Seeded pegawai PPID -> ${p.namaLengkap}`); - } catch (error: any) { - if (error.code === "P2002") { - console.warn( - `⚠️ Pegawai PPID with duplicate email (skipping): ${p.email}` - ); - } else { - console.error( - `❌ Failed to seed pegawai PPID ${p.namaLengkap}:`, - error.message - ); - } - } - } - console.log("✅ pegawai PPID seeding completed"); - - // =========== SUBMENU VISI MISI PPID =========== - - for (const v of visiMisiPPID) { - await prisma.visiMisiPPID.upsert({ - where: { - id: v.id, - }, - update: { - misi: v.misi, - visi: v.visi, - }, - create: { - id: v.id, - misi: v.misi, - visi: v.visi, - }, - }); - } - console.log("visi misi PPID success ..."); - - // =========== SUBMENU DASAR HUKUM PPID =========== - for (const v of dasarHukumPPID) { - await prisma.dasarHukumPPID.upsert({ - where: { - id: v.id, - }, - update: { - judul: v.judul, - content: v.content, - }, - create: { - id: v.id, - judul: v.judul, - content: v.content, - }, - }); - } - console.log("dasar hukum PPID success ..."); - - // =========== SUBMENU DAFTAR INFORMASI PUBLIK PPID =========== - for (const v of daftarInformasiPublik) { - // Convert string date to Date object - const tanggal = new Date(v.tanggal); - - await prisma.daftarInformasiPublik.upsert({ - where: { - id: v.id, - }, - update: { - jenisInformasi: v.jenisInformasi, - deskripsi: v.deskripsi, - tanggal: tanggal, - }, - create: { - id: v.id, - jenisInformasi: v.jenisInformasi, - deskripsi: v.deskripsi, - tanggal: tanggal, - }, - }); - } - console.log("daftar informasi publik PPID success ..."); - + // =========== SUBMENU POTENSI DESA =========== + console.log("🔄Seeding Kategori Potensi Desa ..."); for (const c of kategoriPotensi) { await prisma.kategoriPotensi.upsert({ where: { @@ -1005,6 +951,8 @@ import resolveImageById from "./resolveImageByName"; console.log("potensi success ..."); + // ================== SUBMENU BERITA ======================== + console.log("🔄 Seeding Kategori Berita..."); for (const k of kategoriBerita) { await prisma.kategoriBerita.upsert({ where: { @@ -1069,9 +1017,10 @@ import resolveImageById from "./resolveImageByName"; }, }); } + console.log("berita success ..."); - console.log("potensi success ..."); - + // ================== SUBMENU PENGUMUMAN ======================== + console.log("🔄 Seeding Kategori Pengumuman..."); for (const c of kategoriPengumuman) { await safeSeedUnique( "categoryPengumuman", @@ -1083,8 +1032,9 @@ import resolveImageById from "./resolveImageByName"; ); } - console.log("category pengumuman success ..."); + console.log("kategori pengumuman success ..."); + console.log("🔄 Seeding Pengumuman..."); for (const p of pengumuman) { await prisma.pengumuman.upsert({ where: { @@ -1105,8 +1055,10 @@ import resolveImageById from "./resolveImageByName"; }); } - console.log("category pengumuman success ..."); + console.log("pengumuman success ..."); + // ================== SUBMENU GALLERY ======================== + console.log("🔄 Seeding Gallery Video..."); for (const v of galleryVideo) { await prisma.galleryVideo.upsert({ where: { @@ -1125,100 +1077,167 @@ import resolveImageById from "./resolveImageByName"; }); } - console.log("category pengumuman success ..."); + console.log("gallery video success ..."); - for (const j of jenisInformasiDiminta) { - await prisma.jenisInformasiDiminta.upsert({ - where: { - name: j.name, - }, + // =========== LAYANAN DESA =========== + console.log("🔄 Seeding Pelayanan Surat Keterangan..."); + + for (const p of pelayananSuratKeterangan) { + const existing = await prisma.pelayananSuratKeterangan.findUnique({ + where: { id: p.id }, + select: { imageId: true, image2Id: true }, // 📌 tambahkan image2Id + }); + + // 1️⃣ Handle imageId + let imageId = existing?.imageId ?? null; + + if (!imageId && p.image) { + imageId = await resolveImageById(p.image); + + if (imageId) { + console.log(`✅ Image resolved for "${p.name}" → ${p.image}`); + } else { + console.warn(`⚠️ Image not resolved for "${p.name}" → ${p.image}`); + } + } + + // 2️⃣ Handle image2Id + let image2Id = existing?.image2Id ?? null; + + if (!image2Id && p.image2) { + image2Id = await resolveImageById(p.image2); + + if (image2Id) { + console.log(`✅ Image2 resolved for "${p.name}" → ${p.image2}`); + } else { + console.warn(`⚠️ Image2 not resolved for "${p.name}" → ${p.image2}`); + } + } + + // 3️⃣ Upsert dengan kedua image + await prisma.pelayananSuratKeterangan.upsert({ + where: { id: p.id }, update: { - name: j.name, + name: p.name, + deskripsi: p.deskripsi, + imageId, + image2Id, // 📌 tambahkan ini }, create: { - name: j.name, + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + imageId, + image2Id, // 📌 tambahkan ini }, }); } - console.log("jenis informasi diminta success ..."); + console.log("✅ Pelayanan Surat Keterangan success..."); - for (const c of caraMemperolehInformasi) { - await prisma.caraMemperolehInformasi.upsert({ - where: { - name: c.name, - }, + for (const p of pelayananTelunjukSaktiDesa) { + await prisma.pelayananTelunjukSaktiDesa.upsert({ + where: { id: p.id }, update: { - name: c.name, + name: p.name, + deskripsi: p.deskripsi, + link: p.link, }, create: { - name: c.name, + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + link: p.link, }, }); } - console.log("cara memperoleh informasi success ..."); + console.log("pelayanan telunjuk sakti desa success ..."); - for (const c of caraMemperolehSalinanInformasi) { - await prisma.caraMemperolehSalinanInformasi.upsert({ + for (const l of pelayananPerizinanBerusaha) { + await prisma.pelayananPerizinanBerusaha.upsert({ where: { - name: c.name, + id: l.id, }, update: { - name: c.name, + name: l.name, + deskripsi: l.deskripsi, + link: l.link, }, create: { - name: c.name, + id: l.id, + name: l.name, + deskripsi: l.deskripsi, + link: l.link, }, }); } - console.log("cara memperoleh salinan informasi success ..."); - for (const j of jenisKelamin) { - await prisma.jenisKelaminResponden.upsert({ + console.log("pelayanan perizinan berusaha success ..."); + + for (const l of pelayananPendudukNonPermanen) { + await prisma.pelayananPendudukNonPermanen.upsert({ where: { - id: j.id, + id: l.id, }, update: { - name: j.name, + name: l.name, + deskripsi: l.deskripsi, }, create: { - id: j.id, - name: j.name, + id: l.id, + name: l.name, + deskripsi: l.deskripsi, }, }); } - console.log("jenis kelamin responden success ..."); + console.log("pelayanan penduduk non permanen success ..."); - for (const r of pilihanRatingResponden) { - await prisma.pilihanRatingResponden.upsert({ - where: { - id: r.id, - }, + // =========== PENGHARGAAN =========== + console.log("🔄 Seeding Penghargaan..."); + for (const p of penghargaan) { + const existing = await prisma.penghargaan.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.penghargaan.upsert({ + where: { id: p.id }, update: { - name: r.name, + name: p.name, + juara: p.juara, + deskripsi: p.deskripsi, + imageId, }, create: { - id: r.id, - name: r.name, + id: p.id, + name: p.name, + juara: p.juara, + deskripsi: p.deskripsi, + imageId, }, }); } - console.log("pilihan rating responden success ..."); - - for (const u of umurResponden) { - await prisma.umurResponden.upsert({ - where: { - id: u.id, - }, - update: { - name: u.name, - }, - create: { - id: u.id, - name: u.name, - }, - }); - } - console.log("umur responden success ..."); + console.log("penghargaan success ..."); for (const k of kategoriProduk) { await prisma.kategoriProduk.upsert({ @@ -1238,6 +1257,341 @@ import resolveImageById from "./resolveImageByName"; const flattenedPosisiBumdes = posisiOrganisasi.flat(); + // ====================== MENU KESEHATAN ======================== + // ==================== SUBMENU POSYANDU ========================= + console.log("🔄 Seeding Posyandu..."); + for (const p of posyandu) { + const existing = await prisma.posyandu.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.posyandu.upsert({ + where: { id: p.id }, + update: { + name: p.name, + nomor: p.nomor, + deskripsi: p.deskripsi, + jadwalPelayanan: p.jadwalPelayanan, + imageId, + }, + create: { + id: p.id, + name: p.name, + nomor: p.nomor, + deskripsi: p.deskripsi, + jadwalPelayanan: p.jadwalPelayanan, + imageId, + }, + }); + } + console.log("posyandu success ..."); + + // ==================== SUBMENU PUSKESMAS ========================= + console.log("🔄 Seeding Kontak Puskesmas..."); + for (const k of kontakPuskesmas) { + await prisma.kontakPuskesmas.upsert({ + where: { + id: k.id, + }, + update: { + kontakPuskesmas: k.kontakPuskesmas, + email: k.email, + facebook: k.facebook, + kontakUGD: k.kontakUGD, + }, + create: { + id: k.id, + kontakPuskesmas: k.kontakPuskesmas, + email: k.email, + facebook: k.facebook, + kontakUGD: k.kontakUGD, + }, + }); + } + console.log("kontak puskesmas success ..."); + + console.log("🔄 Seeding Jam Puskesmas..."); + for (const k of jamPuskesmas) { + await prisma.jamOperasional.upsert({ + where: { + id: k.id, + }, + update: { + workDays: k.workDays, + weekDays: k.weekDays, + holiday: k.holiday, + }, + create: { + id: k.id, + workDays: k.workDays, + weekDays: k.weekDays, + holiday: k.holiday, + }, + }); + } + console.log("jam puskesmas success ..."); + + console.log("🔄 Seeding Puskesmas..."); + for (const p of puskesmas) { + const existing = await prisma.puskesmas.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.puskesmas.upsert({ + where: { id: p.id }, + update: { + name: p.name, + alamat: p.alamat, + jamId: p.jamId, + imageId, + kontakId: p.kontakId, + }, + create: { + id: p.id, + name: p.name, + alamat: p.alamat, + jamId: p.jamId, + imageId, + kontakId: p.kontakId, + }, + }); + } + console.log("puskesmas success ..."); + + // ==================== SUBMENU PROGRAM KESEHATAN ========================= + console.log("🔄 Seeding Program Kesehatan..."); + for (const p of programKesehatan) { + const existing = await prisma.programKesehatan.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.programKesehatan.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsi: p.deskripsi, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsi: p.deskripsi, + imageId, + }, + }); + } + console.log("program kesehatan success ..."); + + // ==================== SUBMENU PENANGANAN DARURAT ========================= + console.log("🔄 Seeding Penanganan Darurat..."); + for (const p of penangananDarurat) { + const existing = await prisma.penangananDarurat.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.penangananDarurat.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsi: p.deskripsi, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + imageId, + }, + }); + } + console.log("penanganan darurat success ..."); + + // ==================== SUBMENU KONTAK DARURAT ========================= + console.log("🔄 Seeding Kontak Darurat..."); + for (const p of kontakDarurat) { + const existing = await prisma.kontakDarurat.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.kontakDarurat.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsi: p.deskripsi, + whatsapp: p.whatsapp, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + whatsapp: p.whatsapp, + imageId, + }, + }); + } + console.log("kontak darurat success ..."); + + // ==================== SUBMENU INFO WABAH PENYAKIT ========================= + console.log("🔄 Seeding Info Wabah Penyakit..."); + for (const p of infoWabahPenyakit) { + const existing = await prisma.infoWabahPenyakit.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.infoWabahPenyakit.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsiLengkap: p.deskripsiLengkap, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsiLengkap: p.deskripsiLengkap, + imageId, + }, + }); + } + console.log("kontak darurat success ..."); + // ✅ Urutkan berdasarkan hierarki const sortedPosisiBumdes = flattenedPosisiBumdes.sort( (a, b) => a.hierarki - b.hierarki diff --git a/prisma/seed_assets.ts b/prisma/seed_assets.ts index 0af35add..a0922c67 100644 --- a/prisma/seed_assets.ts +++ b/prisma/seed_assets.ts @@ -45,7 +45,7 @@ export default async function seedAssets() { // 1. Download zip const url = - "https://cld-dkr-makuro-seafile.wibudev.com/f/bc437c719af64c0bb7f2/?dl=1"; + "https://cld-dkr-makuro-seafile.wibudev.com/f/1d6104cdf2b849f89533/?dl=1"; const res = await fetchWithRetry(url, 3, 20000); // Validasi content-type diff --git a/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx index 842ccb3c..9ac0742b 100644 --- a/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx +++ b/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx @@ -102,8 +102,10 @@ function ListKategoriBerita({ search }: { search: string }) { {/* Desktop Table */} -