2020 - Sekarang: Founder Ugawa Record Music Studio
2010 - 2016: Dosen Fakultas Hukum Universitas Mahasaraswati Denpasar
",
"pengalaman": "
1996 – 1997: Ketua OSIS SMP Negeri 1 Abiansemal
1999 – 2000: Ketua OSIS SMA Negeri 1 Mengwi
2008 – 2009: Ketua BEM Universitas Mahasaraswati Denpasar
2008 – 2010: Ketua Sekaa Taruna Sila Dharma, Banjar Tengah, Desa Adat Tegal, Darmasaba
2020 – Sekarang: Pengurus Young Lawyer Committee Peradi Denpasar
2021 – Sekarang: Dewan Kehormatan Himpunan Pengusaha Muda Indonesia (HIPMI) Badung
2023 – 2028: Komite Tetap Advokasi – Bidang Hukum dan Regulasi Kamar Dagang dan Industri Badung
",
"unggulan": "
Pemberdayaan Ekonomi dan UMKM
Pelatihan dan pendampingan UMKM lokal
Program bantuan modal usaha bagi pelaku usaha kecil
Digitalisasi UMKM untuk meningkatkan pemasaran produk lokal
",
- "imageUrl": "/assets/images/ppid/profile-ppid/perbekel.png"
+ "imageUrl": "/uploads/seeded-images/profile-ppid/perbekel.png"
}
]
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index df59d4f3..6d0c1c30 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -593,7 +593,7 @@ model FileStorage {
mimeType String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
- deletedAt DateTime? // nullable agar bisa menandakan belum dihapus
+ deletedAt DateTime?
isActive Boolean @default(true)
link String
}
diff --git a/prisma/seed.ts b/prisma/seed.ts
index dd556335..92d409c2 100644
--- a/prisma/seed.ts
+++ b/prisma/seed.ts
@@ -1,277 +1,277 @@
-import prisma from '@/lib/prisma'
-import categoryPengumuman from './data/category-pengumuman.json'
-import katagoryBerita from './data/katagory-berita.json'
-import caraMemperolehInformasi from './data/list-caraMemperolehInformasi.json'
-import caraMemperolehSalinanInformasi from './data/list-caraMemperolehSalinanInformasi.json'
-import jenisInformasiDiminta from './data/list-jenisInfromasi.json'
-import layanan from './data/list-layanan.json'
-import potensi from './data/list-potensi.json'
-import visiMisiPPID from './data/ppid/visi-misi-ppid/visimisiPPID.json'
-import dasarHukumPPID from './data/ppid/dasar-hukum-ppid/dasarhukumPPID.json'
-import profileDesa from './data/desa/profile/profile_desa.json'
-import profilePerbekel from './data/desa/profile/profil_perbekel.json'
-import profilePPID from './data/ppid/profile-ppid/profilePPid.json'
-import path from 'path'
-import fs from 'fs'
-import { mkdir, writeFile } from 'fs/promises'
-import { v4 as uuid } from 'uuid'
+import prisma from "@/lib/prisma";
+import categoryPengumuman from "./data/category-pengumuman.json";
+import katagoryBerita from "./data/katagory-berita.json";
+import caraMemperolehInformasi from "./data/list-caraMemperolehInformasi.json";
+import caraMemperolehSalinanInformasi from "./data/list-caraMemperolehSalinanInformasi.json";
+import jenisInformasiDiminta from "./data/list-jenisInfromasi.json";
+import layanan from "./data/list-layanan.json";
+import potensi from "./data/list-potensi.json";
+import visiMisiPPID from "./data/ppid/visi-misi-ppid/visimisiPPID.json";
+import dasarHukumPPID from "./data/ppid/dasar-hukum-ppid/dasarhukumPPID.json";
+import profileDesa from "./data/desa/profile/profile_desa.json";
+import profilePerbekel from "./data/desa/profile/profil_perbekel.json";
+import profilePPID from "./data/ppid/profile-ppid/profilePPid.json";
+import path from "path";
+import fs from "fs";
+import { mkdir, writeFile } from "fs/promises";
+import { v4 as uuid } from "uuid";
(async () => {
- for (const l of layanan) {
- await prisma.layanan.upsert({
- where: {
- name: l.name
- },
- update: {
- name: l.name
- },
- create: {
- name: l.name
- }
- })
+ for (const l of layanan) {
+ await prisma.layanan.upsert({
+ where: {
+ name: l.name,
+ },
+ update: {
+ name: l.name,
+ },
+ create: {
+ name: l.name,
+ },
+ });
+ }
+
+ console.log("layanan success ...");
+
+ for (const p of potensi) {
+ await prisma.potensi.upsert({
+ where: {
+ name: p.name,
+ },
+ update: {
+ name: p.name,
+ },
+ create: {
+ name: p.name,
+ },
+ });
+ }
+
+ console.log("potensi success ...");
+
+ for (const k of katagoryBerita) {
+ await prisma.katagoryBerita.upsert({
+ where: {
+ name: k.name,
+ },
+ update: {
+ name: k.name,
+ },
+ create: {
+ name: k.name,
+ },
+ });
+ }
+
+ console.log("katagory berita success ...");
+
+ for (const c of categoryPengumuman) {
+ await prisma.categoryPengumuman.upsert({
+ where: {
+ name: c.name,
+ },
+ update: {
+ name: c.name,
+ },
+ create: {
+ name: c.name,
+ },
+ });
+ }
+
+ console.log("category pengumuman success ...");
+
+ 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 ...");
+
+ const seedProfilePPID = async () => {
+ const targetDir = path.resolve("public", "uploads", "seeded-images", "profile-ppid")
+
+ // Buat folder hanya jika belum ada
+ if (!fs.existsSync(targetDir)) {
+ await mkdir(targetDir, { recursive: true })
}
-
- console.log("layanan success ...")
-
- for (const p of potensi) {
- await prisma.potensi.upsert({
- where: {
- name: p.name
- },
- update: {
- name: p.name
- },
- create: {
- name: p.name
- }
- })
- }
-
- console.log("potensi success ...")
-
- for (const k of katagoryBerita) {
- await prisma.katagoryBerita.upsert({
- where: {
- name: k.name
- },
- update: {
- name: k.name
- },
- create: {
- name: k.name
- }
- })
- }
-
- console.log("katagory berita success ...")
-
- for (const c of categoryPengumuman) {
- await prisma.categoryPengumuman.upsert({
- where: {
- name: c.name
- },
- update: {
- name: c.name
- },
- create: {
- name: c.name
- }
- })
- }
-
- console.log("category pengumuman success ...")
-
- 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 ...")
-
- const seedProfilePPID = async () => {
- const targetDir = path.resolve("public", "assets", "images", "ppid", "profile-ppid")
- await mkdir(targetDir, { recursive: true })
-
- for (const c of profilePPID) {
- let finalImageUrl = c.imageUrl
-
- // kalau imageUrl diawali dengan "/assets/images", artinya kita harus copy file dari seed-images
- if (c.imageUrl.startsWith("/assets/images/")) {
- const filename = path.basename(c.imageUrl) // misal "perbekel.png"
- const seedImagePath = path.resolve("prisma", "seed-images", filename)
-
- // Buat nama baru yang unik agar tidak bentrok
- const targetFilename = `${uuid()}_${filename}`
- const targetPath = path.join(targetDir, targetFilename)
-
- // Salin file dari prisma/seed-images ke public/
- const buffer = fs.readFileSync(seedImagePath)
- await writeFile(targetPath, buffer)
-
- finalImageUrl = `/assets/images/ppid/profile-ppid/${targetFilename}`
- }
-
- // Upsert ke database
- await prisma.profilePPID.upsert({
- where: { id: c.id },
- update: {
- name: c.name,
- biodata: c.biodata,
- riwayat: c.riwayat,
- pengalaman: c.pengalaman,
- unggulan: c.unggulan,
- imageUrl: finalImageUrl,
- },
- create: {
- id: c.id,
- name: c.name,
- biodata: c.biodata,
- riwayat: c.riwayat,
- pengalaman: c.pengalaman,
- unggulan: c.unggulan,
- imageUrl: finalImageUrl,
- },
- })
- }
-
- console.log("✅ profilePPID seeded from JSON with image copying")
+
+ for (const c of profilePPID) {
+ let finalImageUrl = c.imageUrl
+
+ if (c.imageUrl.startsWith("/uploads/seeded-images/")) {
+ const filename = path.basename(c.imageUrl)
+ const seedImagePath = path.resolve("prisma", "seed-images", filename)
+
+ const targetFilename = `${uuid()}_${filename}`
+ const targetPath = path.join(targetDir, targetFilename)
+
+ const buffer = fs.readFileSync(seedImagePath)
+ await writeFile(targetPath, buffer)
+
+ finalImageUrl = `/uploads/seeded-images/profile-ppid/${targetFilename}`
}
-
- await seedProfilePPID()
-
-
- 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
- }
- })
+
+ await prisma.profilePPID.upsert({
+ where: { id: c.id },
+ update: {
+ name: c.name,
+ biodata: c.biodata,
+ riwayat: c.riwayat,
+ pengalaman: c.pengalaman,
+ unggulan: c.unggulan,
+ imageUrl: finalImageUrl,
+ },
+ create: {
+ id: c.id,
+ name: c.name,
+ biodata: c.biodata,
+ riwayat: c.riwayat,
+ pengalaman: c.pengalaman,
+ unggulan: c.unggulan,
+ imageUrl: finalImageUrl,
+ },
+ })
}
- console.log("visi misi PPID success ...")
+
+ console.log("✅ profilePPID seeded from JSON with image copying")
+ }
+
+ await seedProfilePPID()
- 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 ...")
+ 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 ...");
- for (const v of profileDesa) {
- await prisma.profileDesa.upsert({
- where: {
- id: v.id,
- },
- update: {
- sejarah: v.sejarah,
- visi: v.visi,
- misi: v.misi,
- lambang: v.lambang,
- maskot: v.maskot,
- profilPerbekelId: v.profilPerbekelId
- },
- create: {
- id: v.id,
- sejarah: v.sejarah,
- visi: v.visi,
- misi: v.misi,
- lambang: v.lambang,
- maskot: v.maskot,
- profilPerbekelId: v.profilPerbekelId
- }
- })
- }
- console.log("profile desa success ...")
+ 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 ...");
- for (const v of profilePerbekel) {
- await prisma.profilPerbekel.upsert({
- where: {
- id: v.id,
- },
- update: {
- biodata: v.biodata,
- pengalaman: v.pengalaman,
- pengalamanOrganisasi: v.pengalamanOrganisasi,
- programUnggulan: v.programUnggulan
- },
- create: {
- id: v.id,
- biodata: v.biodata,
- pengalaman: v.pengalaman,
- pengalamanOrganisasi: v.pengalamanOrganisasi,
- programUnggulan: v.programUnggulan
- }
- })
- }
- console.log("profile perbekel success ...")
+ for (const v of profileDesa) {
+ await prisma.profileDesa.upsert({
+ where: {
+ id: v.id,
+ },
+ update: {
+ sejarah: v.sejarah,
+ visi: v.visi,
+ misi: v.misi,
+ lambang: v.lambang,
+ maskot: v.maskot,
+ profilPerbekelId: v.profilPerbekelId,
+ },
+ create: {
+ id: v.id,
+ sejarah: v.sejarah,
+ visi: v.visi,
+ misi: v.misi,
+ lambang: v.lambang,
+ maskot: v.maskot,
+ profilPerbekelId: v.profilPerbekelId,
+ },
+ });
+ }
+ console.log("profile desa success ...");
-})().then(() => prisma.$disconnect()).catch((e) => {
- console.error(e)
- prisma.$disconnect()
+ for (const v of profilePerbekel) {
+ await prisma.profilPerbekel.upsert({
+ where: {
+ id: v.id,
+ },
+ update: {
+ biodata: v.biodata,
+ pengalaman: v.pengalaman,
+ pengalamanOrganisasi: v.pengalamanOrganisasi,
+ programUnggulan: v.programUnggulan,
+ },
+ create: {
+ id: v.id,
+ biodata: v.biodata,
+ pengalaman: v.pengalaman,
+ pengalamanOrganisasi: v.pengalamanOrganisasi,
+ programUnggulan: v.programUnggulan,
+ },
+ });
+ }
+ console.log("profile perbekel success ...");
+})()
+ .then(() => prisma.$disconnect())
+ .catch((e) => {
+ console.error(e);
+ prisma.$disconnect();
+ });
+
+process.on("exit", () => {
+ prisma.$disconnect();
});
-process.on('exit', () => {
- prisma.$disconnect()
-})
-
-process.on('SIGINT', () => {
- prisma.$disconnect()
- process.exit(0)
-})
\ No newline at end of file
+process.on("SIGINT", () => {
+ prisma.$disconnect();
+ process.exit(0);
+});
diff --git a/public/assets/images/ppid/profile-ppid/1585618b-aec2-4b6c-a8a6-08e9c6eefa79_perbekel.png b/public/assets/images/ppid/profile-ppid/1585618b-aec2-4b6c-a8a6-08e9c6eefa79_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1585618b-aec2-4b6c-a8a6-08e9c6eefa79_perbekel.png differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747820179116_berita-pemerintahan.jpg b/public/assets/images/ppid/profile-ppid/1_1747820179116_berita-pemerintahan.jpg
new file mode 100644
index 00000000..6b0e5be3
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747820179116_berita-pemerintahan.jpg differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747835389645_capybara.png b/public/assets/images/ppid/profile-ppid/1_1747835389645_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747835389645_capybara.png differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747836129969_bgDesktop.jpg b/public/assets/images/ppid/profile-ppid/1_1747836129969_bgDesktop.jpg
new file mode 100644
index 00000000..9a7f9d24
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747836129969_bgDesktop.jpg differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747836263333_capybara.png b/public/assets/images/ppid/profile-ppid/1_1747836263333_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747836263333_capybara.png differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747836558027_capybara.png b/public/assets/images/ppid/profile-ppid/1_1747836558027_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747836558027_capybara.png differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747836664305_capybara.png b/public/assets/images/ppid/profile-ppid/1_1747836664305_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747836664305_capybara.png differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747894445049_capybara.png b/public/assets/images/ppid/profile-ppid/1_1747894445049_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747894445049_capybara.png differ
diff --git a/public/assets/images/ppid/profile-ppid/1_1747899226449_capybara.png b/public/assets/images/ppid/profile-ppid/1_1747899226449_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747899226449_capybara.png differ
diff --git a/public/assets/images/ppid/profile-ppid/7ede98a1-a154-480c-a0f6-5dca983fdef3_perbekel.png b/public/assets/images/ppid/profile-ppid/7ede98a1-a154-480c-a0f6-5dca983fdef3_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/7ede98a1-a154-480c-a0f6-5dca983fdef3_perbekel.png differ
diff --git a/public/uploads/profile-ppid/1_1747885424609_budaya-1.jpg b/public/uploads/profile-ppid/1_1747885424609_budaya-1.jpg
new file mode 100644
index 00000000..9cd84d04
Binary files /dev/null and b/public/uploads/profile-ppid/1_1747885424609_budaya-1.jpg differ
diff --git a/public/uploads/seeded-images/ppid/profile-ppid/1_1747836703445_capybara.png b/public/uploads/seeded-images/ppid/profile-ppid/1_1747836703445_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/uploads/seeded-images/ppid/profile-ppid/1_1747836703445_capybara.png differ
diff --git a/public/uploads/seeded-images/ppid/profile-ppid/1_1747836821689_capybara.png b/public/uploads/seeded-images/ppid/profile-ppid/1_1747836821689_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/uploads/seeded-images/ppid/profile-ppid/1_1747836821689_capybara.png differ
diff --git a/public/uploads/seeded-images/ppid/profile-ppid/1_1747839042145_capybara.png b/public/uploads/seeded-images/ppid/profile-ppid/1_1747839042145_capybara.png
new file mode 100644
index 00000000..16a01d4c
Binary files /dev/null and b/public/uploads/seeded-images/ppid/profile-ppid/1_1747839042145_capybara.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/021b212f-097f-4c2a-a5e5-273d7458c8da_perbekel.png b/public/uploads/seeded-images/profile-ppid/021b212f-097f-4c2a-a5e5-273d7458c8da_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/021b212f-097f-4c2a-a5e5-273d7458c8da_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/20202f69-857c-463a-b524-c407e50401c8_perbekel.png b/public/uploads/seeded-images/profile-ppid/20202f69-857c-463a-b524-c407e50401c8_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/20202f69-857c-463a-b524-c407e50401c8_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/47ef008b-bf7f-467f-8c8e-bf9259a08656_perbekel.png b/public/uploads/seeded-images/profile-ppid/47ef008b-bf7f-467f-8c8e-bf9259a08656_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/47ef008b-bf7f-467f-8c8e-bf9259a08656_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/54ad4911-4752-413b-8242-b8fbd0309df4_perbekel.png b/public/uploads/seeded-images/profile-ppid/54ad4911-4752-413b-8242-b8fbd0309df4_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/54ad4911-4752-413b-8242-b8fbd0309df4_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/664e4fbc-af1e-4e5f-aecd-4fdbf728c74d_perbekel.png b/public/uploads/seeded-images/profile-ppid/664e4fbc-af1e-4e5f-aecd-4fdbf728c74d_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/664e4fbc-af1e-4e5f-aecd-4fdbf728c74d_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/8e492234-e95e-4672-9041-d5c4f611d7fb_perbekel.png b/public/uploads/seeded-images/profile-ppid/8e492234-e95e-4672-9041-d5c4f611d7fb_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/8e492234-e95e-4672-9041-d5c4f611d7fb_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/90db5197-b0c1-441a-8585-bc33758cc3a9_perbekel.png b/public/uploads/seeded-images/profile-ppid/90db5197-b0c1-441a-8585-bc33758cc3a9_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/90db5197-b0c1-441a-8585-bc33758cc3a9_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/a146af5a-e48d-4c19-8350-2383a3e3be22_perbekel.png b/public/uploads/seeded-images/profile-ppid/a146af5a-e48d-4c19-8350-2383a3e3be22_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/a146af5a-e48d-4c19-8350-2383a3e3be22_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/a85625e1-cbd4-4869-b809-6f27bc4979b2_perbekel.png b/public/uploads/seeded-images/profile-ppid/a85625e1-cbd4-4869-b809-6f27bc4979b2_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/a85625e1-cbd4-4869-b809-6f27bc4979b2_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/bbfed5d8-a1f1-4087-a542-d7f7c9935bd8_perbekel.png b/public/uploads/seeded-images/profile-ppid/bbfed5d8-a1f1-4087-a542-d7f7c9935bd8_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/bbfed5d8-a1f1-4087-a542-d7f7c9935bd8_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/cdd3cd52-c9c4-4c96-a29d-728a774b5955_perbekel.png b/public/uploads/seeded-images/profile-ppid/cdd3cd52-c9c4-4c96-a29d-728a774b5955_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/cdd3cd52-c9c4-4c96-a29d-728a774b5955_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/e658ba55-fa8a-4f0d-bcbd-78de12b2ce33_perbekel.png b/public/uploads/seeded-images/profile-ppid/e658ba55-fa8a-4f0d-bcbd-78de12b2ce33_perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/e658ba55-fa8a-4f0d-bcbd-78de12b2ce33_perbekel.png differ
diff --git a/public/uploads/seeded-images/profile-ppid/perbekel.png b/public/uploads/seeded-images/profile-ppid/perbekel.png
new file mode 100644
index 00000000..ed1cbd10
Binary files /dev/null and b/public/uploads/seeded-images/profile-ppid/perbekel.png differ
diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/page.tsx
index 04a107b2..6f9e8e20 100644
--- a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/page.tsx
+++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/page.tsx
@@ -1,11 +1,31 @@
-import React from 'react';
+import colors from "@/con/colors";
+import { Box, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from "@mantine/core";
+import PengangguranBerdasarkanUsia from "./ui/pengangguranBerdasarkanUsia/page";
+import PengangguranBerdasarkanPendidikan from "./ui/pengangguranBerdasarkanPendidikan/page";
-function Page() {
+export default function Page() {
return (
-
- jumlah-penduduk-usia-kerja-yang-menganggur
-
- );
-}
+
+
+ Jumlah Penduduk Usia Kerja yang Menganggur
+
+
+
+ Pengangguran Bredasarkan Usia
+
+
+ Pengangguran Bredasarkan Pendidikan
+
+
-export default Page;
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/ui/pengangguranBerdasarkanPendidikan/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/ui/pengangguranBerdasarkanPendidikan/page.tsx
new file mode 100644
index 00000000..89bfd0f2
--- /dev/null
+++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/ui/pengangguranBerdasarkanPendidikan/page.tsx
@@ -0,0 +1,47 @@
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
+import React from 'react';
+
+function PengangguranBerdasarkanPendidikan() {
+ return (
+
+
+
+
+ Pengangguran Berdasarkan Pendidikan
+ Pendidikan SD}
+ placeholder="masukkan jumlah penduduk Pendidikan SD yang menganggur"
+ />
+ Pendidikan SMP}
+ placeholder="masukkan jumlah penduduk Pendidikan SMP yang menganggur"
+ />
+ Pendidikan SMA / SMK}
+ placeholder="masukkan jumlah penduduk Pendidikan SMA / SMK yang menganggur"
+ />
+ Pendidikan D1-D3 / S1}
+ placeholder="masukkan jumlah penduduk Pendidikan D1-D3 yang menganggur"
+ />
+
+
+
+
+
+
+
+
+
+ Grafik Pengangguran Berdasarkan Pendidikan
+
+
+
+
+ );
+}
+
+export default PengangguranBerdasarkanPendidikan;
diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/ui/pengangguranBerdasarkanUsia/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/ui/pengangguranBerdasarkanUsia/page.tsx
new file mode 100644
index 00000000..32bc78aa
--- /dev/null
+++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/ui/pengangguranBerdasarkanUsia/page.tsx
@@ -0,0 +1,47 @@
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
+import React from 'react';
+
+function PengangguranBerdasarkanUsia() {
+ return (
+
+
+
+
+ Pengangguran Berdasarkan Usia
+ Usia 18 - 25 tahun}
+ placeholder="masukkan jumlah penduduk usia 18 - 25 tahun yang menganggur"
+ />
+ Usia 26 - 35 tahun}
+ placeholder="masukkan jumlah penduduk usia 26 - 35 tahun yang menganggur"
+ />
+ Usia 36 - 45 tahun}
+ placeholder="masukkan jumlah penduduk usia 36 - 45 tahun yang menganggur"
+ />
+ Usia 46+}
+ placeholder="masukkan jumlah penduduk usia 46+ yang menganggur"
+ />
+
+
+
+
+
+
+
+
+
+ Grafik Pengangguran Berdasarkan Usia
+
+
+
+
+ );
+}
+
+export default PengangguranBerdasarkanUsia;
diff --git a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/create/createLowongan.tsx b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/create/createLowongan.tsx
new file mode 100644
index 00000000..715e9f28
--- /dev/null
+++ b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/create/createLowongan.tsx
@@ -0,0 +1,29 @@
+import { Box, Stack, Text, TextInput, Title } from '@mantine/core';
+
+function CreateLowongan() {
+ return (
+
+
+ Lowongan Kerja Lokal
+ Bekerja Sebagai}
+ placeholder="masukkan bekerja sebagai"
+ />
+ Alamat Usaha}
+ placeholder="masukkan alamat usaha"
+ />
+ Waktu Kerja}
+ placeholder="masukkan waktu kerja"
+ />
+ Gaji selama 1 bulan}
+ placeholder="masukkan gaji selama 1 bulan"
+ />
+
+
+ );
+}
+
+export default CreateLowongan;
diff --git a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/listData/page.tsx b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/listData/page.tsx
new file mode 100644
index 00000000..199264e2
--- /dev/null
+++ b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/listData/page.tsx
@@ -0,0 +1,25 @@
+import colors from '@/con/colors';
+import { Box, Paper, Stack, Title, Text } from '@mantine/core';
+import React from 'react';
+
+function ListDataLowongan() {
+ return (
+
+
+ List Data Lowongan Kerja Lokal
+
+ Bekerja Sebagai
+
+ Alamat Usaha
+
+ Waktu Kerja
+
+ Gaji selama 1 bulan
+
+
+
+
+ );
+}
+
+export default ListDataLowongan;
diff --git a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx
index 78f8a7ee..b222a023 100644
--- a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx
+++ b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx
@@ -1,10 +1,31 @@
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, SimpleGrid, Stack, Title } from '@mantine/core';
import React from 'react';
+import CreateLowongan from './create/createLowongan';
+import ListDataLowongan from './listData/page';
function Page() {
return (
-
- lowongan-kerja-lokal
-
+
+
+
+
+ Lowongan Kerja Lokal
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/app/admin/(dashboard)/ekonomi/pasar-desa/create/createPasarDesa.tsx b/src/app/admin/(dashboard)/ekonomi/pasar-desa/create/createPasarDesa.tsx
new file mode 100644
index 00000000..ca116352
--- /dev/null
+++ b/src/app/admin/(dashboard)/ekonomi/pasar-desa/create/createPasarDesa.tsx
@@ -0,0 +1,36 @@
+import colors from '@/con/colors';
+import { Box, Stack, Text, TextInput, Title } from '@mantine/core';
+import { IconImageInPicture } from '@tabler/icons-react';
+import React from 'react';
+
+function CreatePasarDesa() {
+ return (
+
+
+ Produk Pasar Desa
+
+ Masukkan Foto Produk
+
+
+ Nama Produk}
+ placeholder="masukkan nama produk"
+ />
+ Harga Produk}
+ placeholder="masukkan harga produk"
+ />
+ Rating Produk}
+ placeholder="masukkan rating produk"
+ />
+ Alamat Usaha}
+ placeholder="masukkan alamat usaha"
+ />
+
+
+ );
+}
+
+export default CreatePasarDesa;
diff --git a/src/app/admin/(dashboard)/ekonomi/pasar-desa/listData/page.tsx b/src/app/admin/(dashboard)/ekonomi/pasar-desa/listData/page.tsx
new file mode 100644
index 00000000..3809f2ad
--- /dev/null
+++ b/src/app/admin/(dashboard)/ekonomi/pasar-desa/listData/page.tsx
@@ -0,0 +1,32 @@
+import colors from '@/con/colors';
+import { Box, Paper, Stack, Text, Title } from '@mantine/core';
+import { IconImageInPicture } from '@tabler/icons-react';
+import React from 'react';
+
+function ListDataUsaha() {
+ return (
+
+
+
+
+ List Produk Pasar Desa
+
+ Foto Produk
+
+
+ Nama Produk
+
+ Harga Produk
+
+ Rating Produk
+
+ Alamat Usaha
+
+
+
+
+
+ );
+}
+
+export default ListDataUsaha;
diff --git a/src/app/admin/(dashboard)/ekonomi/pasar-desa/page.tsx b/src/app/admin/(dashboard)/ekonomi/pasar-desa/page.tsx
index bc3baf55..95de3555 100644
--- a/src/app/admin/(dashboard)/ekonomi/pasar-desa/page.tsx
+++ b/src/app/admin/(dashboard)/ekonomi/pasar-desa/page.tsx
@@ -1,10 +1,30 @@
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, Stack, Title } from '@mantine/core';
import React from 'react';
+import CreatePasarDesa from './create/createPasarDesa';
+import ListDataUsaha from './listData/page';
function Page() {
return (
-
- pasar-desa
-
+
+
+
+
+ Pasar Desa
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/app/admin/(dashboard)/keamanan/kontak-darurat/create/createKontak.tsx b/src/app/admin/(dashboard)/keamanan/kontak-darurat/create/createKontak.tsx
new file mode 100644
index 00000000..98ebd6ab
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/kontak-darurat/create/createKontak.tsx
@@ -0,0 +1,28 @@
+import colors from '@/con/colors';
+import { Box, Stack, Text, TextInput } from '@mantine/core';
+import { IconImageInPicture } from '@tabler/icons-react';
+
+function CreateKontakDarurat() {
+ return (
+
+
+ Judul Kontak Darurat}
+ placeholder="masukkan judul kontak darurat"
+ />
+
+ Nama Kontak Darurat}
+ placeholder="masukkan nama kontak darurat"
+ />
+
+ Nomor Kontak Darurat}
+ placeholder="masukkan nomor kontak darurat"
+ />
+
+
+ );
+}
+
+export default CreateKontakDarurat;
diff --git a/src/app/admin/(dashboard)/keamanan/kontak-darurat/listData/page.tsx b/src/app/admin/(dashboard)/keamanan/kontak-darurat/listData/page.tsx
new file mode 100644
index 00000000..6de1176b
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/kontak-darurat/listData/page.tsx
@@ -0,0 +1,23 @@
+import colors from '@/con/colors';
+import { Box, Paper, Stack, Text, Title } from '@mantine/core';
+import React from 'react';
+
+function ListDataKontakDarurat() {
+ return (
+
+
+ List Data Kontak Darurat
+
+ Judul Kontak Darurat
+
+ Nama Kontak Darurat
+
+ Nomor Kontak Darurat
+
+
+
+
+ );
+}
+
+export default ListDataKontakDarurat;
diff --git a/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx b/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx
index 9619b475..10f224ff 100644
--- a/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx
+++ b/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx
@@ -1,10 +1,30 @@
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, SimpleGrid, Stack, Title } from '@mantine/core';
import React from 'react';
+import CreateKontakDarurat from './create/createKontak';
+import ListDataKontakDarurat from './listData/page';
function Page() {
return (
-
- kontak-darurat
-
+
+
+
+
+ Kontak Darurat
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/app/admin/(dashboard)/keamanan/laporan-publik/create/createLaporan.tsx b/src/app/admin/(dashboard)/keamanan/laporan-publik/create/createLaporan.tsx
new file mode 100644
index 00000000..72943bb3
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/laporan-publik/create/createLaporan.tsx
@@ -0,0 +1,27 @@
+import { Box, Stack, Text, TextInput } from '@mantine/core';
+import React from 'react';
+import { KeamananEditor } from '../../_com/keamananEditor';
+
+
+function CreateLaporanPublik() {
+ return (
+
+
+ Judul Laporan Publik}
+ placeholder="masukkan judul laporan publik"
+ />
+ Tanggal Laporan Publik}
+ placeholder="masukkan tanggal laporan publik"
+ />
+
+ Deskripsi Laporan Publik
+
+
+
+
+ );
+}
+
+export default CreateLaporanPublik;
diff --git a/src/app/admin/(dashboard)/keamanan/laporan-publik/listData/page.tsx b/src/app/admin/(dashboard)/keamanan/laporan-publik/listData/page.tsx
new file mode 100644
index 00000000..7acdb40b
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/laporan-publik/listData/page.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Box, Paper, Stack, Text, Title } from '@mantine/core';
+import colors from '@/con/colors';
+
+function ListDataLaporanPublik() {
+ return (
+
+
+ List Data Laporan Publik
+
+ Judul Laporan Publik
+
+ Tanggal Laporan Publik
+
+ Deskripsi Laporan Publik
+
+
+
+
+ );
+}
+
+export default ListDataLaporanPublik;
diff --git a/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx b/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx
index 3905ba8c..0dcd6de5 100644
--- a/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx
+++ b/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx
@@ -1,11 +1,28 @@
-import React from 'react';
+import colors from "@/con/colors";
+import { Box, Button, Group, Paper, SimpleGrid, Stack, Title } from "@mantine/core";
+import CreateLaporanPublik from "./create/createLaporan";
+import ListDataLaporanPublik from "./listData/page";
-function Page() {
+export default function Page() {
return (
-
- laporan-publik
-
- );
-}
-
-export default Page;
+
+
+
+
+ Laporan Publik
+
+
+
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/createPencegahan.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/createPencegahan.tsx
new file mode 100644
index 00000000..3a7cf61b
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/createPencegahan.tsx
@@ -0,0 +1,25 @@
+import colors from '@/con/colors';
+import { Box, Stack, Text, TextInput } from '@mantine/core';
+import { IconImageInPicture } from '@tabler/icons-react';
+import React from 'react';
+
+function CreatePencegahan() {
+ return (
+
+
+ Judul Pencegahan Kriminalitas}
+ placeholder="masukkan judul pencegahan kriminalitas"
+ />
+ Deskripsi Pencegahan Kriminalitas}
+ placeholder="masukkan deskripsi pencegahan kriminalitas"
+ />
+ Gambar Pencegahan Kriminalitas
+
+
+
+ );
+}
+
+export default CreatePencegahan;
diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/listData/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/listData/page.tsx
new file mode 100644
index 00000000..4153abe6
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/listData/page.tsx
@@ -0,0 +1,23 @@
+import colors from '@/con/colors';
+import { Box, Paper, Stack, Text, Title } from '@mantine/core';
+import React from 'react';
+
+function ListDataPencegahan() {
+ return (
+
+
+ List Data Pencegahan Kriminalitas
+
+ Judul Pencegahan Kriminalitas
+
+ Deskripsi Pencegahan Kriminalitas
+
+ Gambar Pencegahan Kriminalitas
+
+
+
+
+ );
+}
+
+export default ListDataPencegahan;
diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx
index 96ff4b2a..be34aed5 100644
--- a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx
+++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx
@@ -1,10 +1,31 @@
+import colors from '@/con/colors';
+import { Stack, SimpleGrid, Box, Paper, Title, Group, Button } from '@mantine/core';
import React from 'react';
+import CreatePencegahan from './create/createPencegahan';
+import ListDataPencegahan from './listData/page';
+
function Page() {
return (
-
- pencegahan-kriminalitas
-
+
+
+
+
+ Kontak Darurat
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/app/admin/(dashboard)/keamanan/tips-keamanan/create/createTips.tsx b/src/app/admin/(dashboard)/keamanan/tips-keamanan/create/createTips.tsx
new file mode 100644
index 00000000..4fb1ada6
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/tips-keamanan/create/createTips.tsx
@@ -0,0 +1,27 @@
+import colors from '@/con/colors';
+import { Box, Stack, Text, TextInput } from '@mantine/core';
+import { IconImageInPicture } from '@tabler/icons-react';
+import React from 'react';
+import { KeamananEditor } from '../../_com/keamananEditor';
+
+function CreateTipsKeamanan() {
+ return (
+
+
+ Judul Tips Keamanan}
+ placeholder="masukkan judul tips keamanan"
+ />
+
+ Upload Gambar
+
+
+
+
+
+ );
+}
+
+export default CreateTipsKeamanan;
diff --git a/src/app/admin/(dashboard)/keamanan/tips-keamanan/listData/page.tsx b/src/app/admin/(dashboard)/keamanan/tips-keamanan/listData/page.tsx
new file mode 100644
index 00000000..4bead65a
--- /dev/null
+++ b/src/app/admin/(dashboard)/keamanan/tips-keamanan/listData/page.tsx
@@ -0,0 +1,24 @@
+import colors from '@/con/colors';
+import { Box, Paper, Stack, Text, Title } from '@mantine/core';
+import { IconImageInPicture } from '@tabler/icons-react';
+import React from 'react';
+
+function ListDataTipsKeamanan() {
+ return (
+
+
+ List Data Tips Keamanan
+
+ Judul Tips Keamanan
+
+ Gambar Tips Keamanan
+
+ Deskripsi Tips Keamanan
+
+
+
+
+ );
+}
+
+export default ListDataTipsKeamanan;
diff --git a/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx b/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx
index 17bea858..e1b672b8 100644
--- a/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx
+++ b/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx
@@ -1,11 +1,31 @@
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, SimpleGrid, Stack, Title } from '@mantine/core';
import React from 'react';
+import CreateTipsKeamanan from './create/createTips';
+import ListDataTipsKeamanan from './listData/page';
function Page() {
return (
-