Seed Menu Ekonomi

Seed MEnu Inovasi
Sisa 2 Menu
This commit is contained in:
2026-02-02 17:31:27 +08:00
parent da585dde99
commit 6c36a15290
23 changed files with 799 additions and 556 deletions

View File

@@ -0,0 +1,25 @@
import prisma from "@/lib/prisma";
import demografiPekerjaan from "../../data/ekonomi/demografi-pekerjaan/demografi-pekerjaan.json";
export async function seedDemografiPekerjaan() {
console.log("🔄 Seeding Demografi Pekerjaan...");
for (const k of demografiPekerjaan) {
await prisma.dataDemografiPekerjaan.upsert({
where: {
id: k.id,
},
update: {
pekerjaan: k.pekerjaan,
lakiLaki: k.lakiLaki,
perempuan: k.perempuan,
},
create: {
id: k.id,
pekerjaan: k.pekerjaan,
lakiLaki: k.lakiLaki,
perempuan: k.perempuan,
},
});
}
console.log("✅ Demografi Pekerjaan seeded successfully");
}

View File

@@ -0,0 +1,23 @@
import prisma from "@/lib/prisma";
import jumlahPendudukMiskin from "../../data/ekonomi/jumlah-penduduk-miskin/jumlah-penduduk-miskin.json";
export async function seedJumlahPendudukMiskin() {
console.log("🔄 Seeding Jumlah Penduduk Miskin...");
for (const k of jumlahPendudukMiskin) {
await prisma.grafikJumlahPendudukMiskin.upsert({
where: {
id: k.id,
},
update: {
year: k.year,
totalPoorPopulation: k.totalPoorPopulation,
},
create: {
id: k.id,
year: k.year,
totalPoorPopulation: k.totalPoorPopulation,
},
});
}
console.log("✅ Jumlah Penduduk Miskin seeded successfully");
}

View File

@@ -0,0 +1,27 @@
import prisma from "@/lib/prisma";
import jumlahPengangguran from "../../data/ekonomi/jumlah-pengangguran/detail-data-pengangguran.json";
export async function seedJumlahPengangguran() {
for (const d of jumlahPengangguran) {
await prisma.detailDataPengangguran.upsert({
where: {
month_year: { month: d.month, year: d.year },
},
update: {
totalUnemployment: d.totalUnemployment,
educatedUnemployment: d.educatedUnemployment,
uneducatedUnemployment: d.uneducatedUnemployment,
percentageChange: d.percentageChange,
},
create: {
month: d.month,
year: d.year,
totalUnemployment: d.totalUnemployment,
educatedUnemployment: d.educatedUnemployment,
uneducatedUnemployment: d.uneducatedUnemployment,
percentageChange: d.percentageChange,
},
});
}
console.log("📊 detailDataPengangguran success ...");
}

View File

@@ -0,0 +1,35 @@
import prisma from "@/lib/prisma";
import lowonganKerjaLokal from "../../data/ekonomi/lowongan-kerja-lokal/lowongan-kerja-lokal.json";
export async function seedLowonganKerjaLokal() {
console.log("🔄 Seeding Lowongan Kerja Lokal...");
for (const k of lowonganKerjaLokal) {
await prisma.lowonganPekerjaan.upsert({
where: {
id: k.id,
},
update: {
posisi: k.posisi,
namaPerusahaan: k.namaPerusahaan,
lokasi: k.lokasi,
tipePekerjaan: k.tipePekerjaan,
gaji: k.gaji,
deskripsi: k.deskripsi,
kualifikasi: k.kualifikasi,
notelp: k.notelp,
},
create: {
id: k.id,
posisi: k.posisi,
namaPerusahaan: k.namaPerusahaan,
lokasi: k.lokasi,
tipePekerjaan: k.tipePekerjaan,
gaji: k.gaji,
deskripsi: k.deskripsi,
kualifikasi: k.kualifikasi,
notelp: k.notelp,
},
});
}
console.log("✅ Lowongan Kerja Lokal seeded successfully");
}

View File

@@ -0,0 +1,91 @@
import prisma from "@/lib/prisma";
import kategoriProduk from "../../data/ekonomi/pasar-desa/kategori-produk.json";
import pasarDesa from "../../data/ekonomi/pasar-desa/pasar-desa.json";
import kategoriToPasar from "../../data/ekonomi/pasar-desa/kategori-to-pasar.json";
export async function seedPasarDesa() {
console.log("🔄 Seeding Kategori Produk...");
for (const k of kategoriProduk) {
await prisma.kategoriProduk.upsert({
where: {
id: k.id,
},
update: {
nama: k.nama,
},
create: {
id: k.id,
nama: k.nama,
},
});
}
console.log("✅ Kategori Produk seeded successfully");
console.log("🔄 Seeding Pasar Desa...");
for (const p of pasarDesa) {
let imageId: string | null = null;
if (p.imageName) {
const image = await prisma.fileStorage.findUnique({
where: { name: p.imageName },
select: { id: true },
});
if (!image) {
console.warn(
`⚠️ Image not found for pasar desa "${p.nama}": ${p.imageName}`,
);
} else {
imageId = image.id;
}
}
await prisma.pasarDesa.upsert({
where: { id: p.id },
update: {
nama: p.nama,
deskripsi: p.deskripsi,
harga: p.harga,
rating: p.rating,
alamatUsaha: p.alamatUsaha,
kontak: p.kontak,
imageId,
kategoriProdukId: p.kategoriProdukId,
},
create: {
id: p.id,
nama: p.nama,
deskripsi: p.deskripsi,
harga: p.harga,
rating: p.rating,
alamatUsaha: p.alamatUsaha,
kontak: p.kontak,
imageId,
kategoriProdukId: p.kategoriProdukId,
},
});
console.log(`✅ Pasar desa seeded: ${p.nama}`);
}
console.log("🎉 Pasar desa seed selesai");
console.log("🔄 Seeding Kategori To Pasar...");
for (const p of kategoriToPasar) {
await prisma.kategoriToPasar.upsert({
where: {
id: p.id,
},
update: {
kategoriId: p.kategoriId,
pasarDesaId: p.pasarDesaId,
},
create: {
id: p.id,
kategoriId: p.kategoriId,
pasarDesaId: p.pasarDesaId,
},
});
}
}

View File

@@ -0,0 +1,81 @@
import prisma from "@/lib/prisma";
import apbdes from "../../data/ekonomi/pendapatan-asli-desa/apbDesa.json";
import pendapatan from "../../data/ekonomi/pendapatan-asli-desa/pendapatanDesa.json";
import belanja from "../../data/ekonomi/pendapatan-asli-desa/belanjaDesa.json";
import pembiayaan from "../../data/ekonomi/pendapatan-asli-desa/pembiayaanDesa.json";
export async function seedPendapatanAsli() {
console.log("🔄 Seeding Pendapatan Asli...");
for (const d of apbdes) {
await prisma.apbDesa.upsert({
where: {
id: d.id,
},
update: {
tahun: d.tahun,
},
create: {
id: d.id,
tahun: d.tahun,
},
});
}
console.log("✅ Pendapatan Asli seeded successfully");
console.log("🔄 Seeding Pendapatan...");
for (const d of pendapatan) {
await prisma.pendapatan.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
value: d.nilai
},
create: {
id: d.id,
name: d.name,
value: d.nilai
},
});
}
console.log("✅ Pendapatan seeded successfully");
console.log("🔄 Seeding Belanja...");
for (const d of belanja) {
await prisma.belanja.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
value: d.nilai
},
create: {
id: d.id,
name: d.name,
value: d.nilai
},
});
}
console.log("✅ Belanja seeded successfully");
console.log("🔄 Seeding Pembiayaan...");
for (const d of pembiayaan) {
await prisma.pembiayaan.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
value: d.nilai
},
create: {
id: d.id,
name: d.name,
value: d.nilai
},
});
}
console.log("✅ Pembiayaan seeded successfully");
}

View File

@@ -0,0 +1,50 @@
import prisma from "@/lib/prisma";
import grafikMenganggurBerdasarkanUsia from "../../data/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran-berdasarkan-usia.json";
import grafikMenganggurBerdasarkanPendidikan from "../../data/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran-berdasarkan-pendidikan.json";
export async function seedPendudukUsiaKerjaYangMenganggur() {
for (const p of grafikMenganggurBerdasarkanUsia) {
await prisma.grafikMenganggurBerdasarkanUsia.upsert({
where: {
id: p.id,
},
update: {
usia18_25: p.usia18_25,
usia26_35: p.usia26_35,
usia36_45: p.usia36_45,
usia46_keatas: p.usia46_keatas,
},
create: {
id: p.id,
usia18_25: p.usia18_25,
usia26_35: p.usia26_35,
usia36_45: p.usia36_45,
usia46_keatas: p.usia46_keatas,
},
});
}
console.log("📊 grafikMenganggurBerdasarkanUsia success ...");
for (const p of grafikMenganggurBerdasarkanPendidikan) {
await prisma.grafikMenganggurBerdasarkanPendidikan.upsert({
where: {
id: p.id,
},
update: {
SD: p.SD,
SMP: p.SMP,
SMA: p.SMA,
D3: p.D3,
S1: p.S1,
},
create: {
id: p.id,
SD: p.SD,
SMP: p.SMP,
SMA: p.SMA,
D3: p.D3,
S1: p.S1,
},
});
}
console.log("📊 grafikMenganggurBerdasarkanUsia success ...");
}

View File

@@ -0,0 +1,50 @@
import prisma from "@/lib/prisma";
import programKemiskinan from "../../data/ekonomi/program-kemiskinan/program-kemiskinan.json";
import statistikKemiskinan from "../../data/ekonomi/program-kemiskinan/statistik-kemiskinan.json";
export async function seedProgramKemiskinan() {
for (const s of statistikKemiskinan) {
await prisma.statistikKemiskinan.upsert({
where: { tahun: s.tahun }, // ✅ FIX
update: {
jumlah: s.jumlah,
},
create: {
id: s.id, // id boleh tetap
tahun: s.tahun,
jumlah: s.jumlah,
},
});
}
console.log("📊 Statistik Kemiskinan seeded successfully");
console.log("🔄 Seeding Program Kemiskinan...");
for (const k of programKemiskinan) {
await prisma.programKemiskinan.upsert({
where: { id: k.id },
update: {
nama: k.nama,
deskripsi: k.deskripsi,
icon: k.icon,
statistik: {
connect: {
tahun: k.tahun, // 👈 BUKAN ID
},
},
},
create: {
id: k.id,
nama: k.nama,
deskripsi: k.deskripsi,
icon: k.icon,
statistik: {
connect: {
tahun: k.tahun,
},
},
},
});
}
console.log("✅ Program Kemiskinan seeded successfully");
}

View File

@@ -0,0 +1,25 @@
import prisma from "@/lib/prisma";
import sektorUnggulanDesa from "../../data/ekonomi/sektor-unggulan/sektor-unggulan.json";
export async function seedSektorUnggulanDesa() {
console.log("🔄 Seeding Sektor Unggulan Desa...");
for (const k of sektorUnggulanDesa) {
await prisma.sektorUnggulanDesa.upsert({
where: {
id: k.id,
},
update: {
name: k.name,
description: k.description,
value: k.value,
},
create: {
id: k.id,
name: k.name,
description: k.description,
value: k.value,
},
});
}
console.log("✅ Sektor Unggulan Desa seeded successfully");
}

View File

@@ -0,0 +1,58 @@
import prisma from "@/lib/prisma";
import posisiOrganisasiBumDes from "../../data/ekonomi/struktur-organisasi/posisi-organisasi-bumdes.json";
import pegawai from "../../data/ekonomi/struktur-organisasi/pegawai-bumdes.json";
export async function seedStrukturBumdes() {
const flattenedPosisi = posisiOrganisasiBumDes.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.posisiOrganisasiBumDes.upsert({
where: { id: p.id },
update: p,
create: p,
});
}
console.log("posisi organisasi berhasil");
for (const p of pegawai) {
await prisma.pegawaiBumDes.upsert({
where: {
id: p.id,
},
update: {
namaLengkap: p.namaLengkap,
gelarAkademik: p.gelarAkademik,
tanggalMasuk: new Date(p.tanggalMasuk),
email: p.email,
telepon: p.telepon,
alamat: p.alamat,
posisiId: p.posisiId,
isActive: p.isActive,
},
create: {
id: p.id,
namaLengkap: p.namaLengkap,
gelarAkademik: p.gelarAkademik,
tanggalMasuk: new Date(p.tanggalMasuk),
email: p.email,
telepon: p.telepon,
alamat: p.alamat,
posisiId: p.posisiId,
isActive: p.isActive,
},
});
}
console.log("pegawai success ...");
}

View File

@@ -0,0 +1,31 @@
import prisma from "@/lib/prisma";
import ajukanIde from "../../data/inovasi/ajukan-ide/ajukan-ide.json";
export async function seedAjukan() {
console.log("🔄 Seeding Ajukan Ide Inovatif...");
for (const d of ajukanIde) {
await prisma.ajukanIdeInovatif.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
alamat: d.alamat,
namaIde: d.namaIde,
deskripsi: d.deskripsi,
masalah: d.masalah,
benefit: d.benefit,
},
create: {
id: d.id,
name: d.name,
alamat: d.alamat,
namaIde: d.namaIde,
deskripsi: d.deskripsi,
masalah: d.masalah,
benefit: d.benefit,
},
});
}
console.log("✅ Ajukan Ide Inovatif seeded successfully");
}

View File

@@ -0,0 +1,25 @@
import prisma from "@/lib/prisma";
import desaDigital from "../../data/inovasi/desa-digital/desa-digital.json";
export async function seedDesaDigital() {
console.log("🔄 Seeding Desa Digital...");
for (const d of desaDigital) {
await prisma.desaDigital.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
deskripsi: d.deskripsi,
imageId: d.imageId,
},
create: {
id: d.id,
name: d.name,
deskripsi: d.deskripsi,
imageId: d.imageId,
},
});
}
console.log("✅ Desa Digital seeded successfully");
}

View File

@@ -0,0 +1,42 @@
import prisma from "@/lib/prisma";
import infoTeknologi from "../../data/inovasi/info-teknologi/info-teknologi.json";
export async function seedInfoTeknologi() {
console.log("🔄 Seeding Info Teknologi...");
for (const p of infoTeknologi) {
let imageId: string | null = null;
if (p.imageName) {
const image = await prisma.fileStorage.findUnique({
where: { name: p.imageName },
select: { id: true },
});
if (!image) {
console.warn(
`⚠️ Image not found for berita "${p.name}": ${p.imageName}`,
);
} else {
imageId = image.id;
}
}
await prisma.infoTekno.upsert({
where: {
id: p.id,
},
update: {
name: p.name,
deskripsi: p.deskripsi,
imageId: imageId,
},
create: {
id: p.id,
name: p.name,
deskripsi: p.deskripsi,
imageId: imageId,
},
});
}
console.log("✅ Info Teknologi seeded successfully");
}

View File

@@ -0,0 +1,66 @@
import prisma from "@/lib/prisma";
import kolaborasiInovasi from "../../data/inovasi/kolaborasi-inovasi/kolaborasi-inovasi.json";
import mitraKolaborasi from "../../data/inovasi/kolaborasi-inovasi/mitra-kolaborasi.json";
export async function seedKolaborasiInovasi() {
console.log("🔄 Seeding Kolaborasi Inovasi...");
for (const p of kolaborasiInovasi) {
await prisma.kolaborasiInovasi.upsert({
where: {
id: p.id,
},
update: {
name: p.name,
tahun: p.tahun,
slug: p.slug,
deskripsi: p.deskripsi,
kolaborator: p.kolaborator,
},
create: {
id: p.id,
name: p.name,
tahun: p.tahun,
slug: p.slug,
deskripsi: p.deskripsi,
kolaborator: p.kolaborator,
},
});
}
console.log("✅ Kolaborasi Inovasi seeded successfully");
console.log("🔄 Seeding Mitra Kolaborasi...");
for (const p of mitraKolaborasi) {
let imageId: string | null = null;
if (p.imageName) {
const image = await prisma.fileStorage.findUnique({
where: { name: p.imageName },
select: { id: true },
});
if (!image) {
console.warn(
`⚠️ Image not found for mitra kolaborasi "${p.name}": ${p.imageName}`,
);
} else {
imageId = image.id;
}
}
await prisma.mitraKolaborasi.upsert({
where: {
id: p.id,
},
update: {
name: p.name,
imageId: imageId,
},
create: {
id: p.id,
name: p.name,
imageId: imageId,
},
});
}
console.log("✅ Mitra Kolaborasi seeded successfully");
}

View File

@@ -0,0 +1,96 @@
import prisma from "@/lib/prisma";
import jenisLayanan from "../../data/inovasi/layanan-online-desa/jenis-layanan.json";
import administrasiOnline from "../../data/inovasi/layanan-online-desa/administrasi-online.json";
import jenisPengaduan from "../../data/inovasi/layanan-online-desa/jenis-pengaduan.json";
import pengaduanMasyarakat from "../../data/inovasi/layanan-online-desa/pengaduan-masyarakat.json";
export async function seedLayananOnlineDesa() {
console.log("🔄 Seeding Jenis Layanan...");
for (const j of jenisLayanan) {
await prisma.jenisLayanan.upsert({
where: {
id: j.id,
},
update: {
nama: j.nama,
deskripsi: j.deskripsi,
},
create: {
id: j.id,
nama: j.nama,
deskripsi: j.deskripsi,
},
});
}
console.log("✅ Jenis Layanan seeded successfully");
console.log("🔄 Seeding Administrasi Online...");
for (const d of administrasiOnline) {
await prisma.administrasiOnline.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
alamat: d.alamat,
nomorTelepon: d.nomorTelepon,
jenisLayananId: d.jenisLayananId,
},
create: {
id: d.id,
name: d.name,
alamat: d.alamat,
nomorTelepon: d.nomorTelepon,
jenisLayananId: d.jenisLayananId,
},
});
}
console.log("✅ Administrasi Online seeded successfully");
console.log("🔄 Seeding Jenis Pengaduan Masyarakat...");
for (const d of jenisPengaduan) {
await prisma.jenisPengaduan.upsert({
where: {
id: d.id,
},
update: {
nama: d.nama,
},
create: {
id: d.id,
nama: d.nama,
},
});
}
console.log("✅ Jenis Pengaduan Masyarakat seeded successfully");
console.log("🔄 Seeding Pengaduan Masyarakat...");
for (const d of pengaduanMasyarakat) {
await prisma.pengaduanMasyarakat.upsert({
where: {
id: d.id,
},
update: {
name: d.name,
email: d.email,
nik: d.nik,
nomorTelepon: d.nomorTelepon,
judulPengaduan: d.judulPengaduan,
lokasiKejadian: d.lokasiKejadian,
imageId: d.imageId,
deskripsiPengaduan: d.deskripsiPengaduan,
jenisPengaduanId: d.jenisPengaduanId,
},
create: {
id: d.id,
name: d.name,
email: d.email,
nik: d.nik,
nomorTelepon: d.nomorTelepon,
judulPengaduan: d.judulPengaduan,
lokasiKejadian: d.lokasiKejadian,
imageId: d.imageId,
deskripsiPengaduan: d.deskripsiPengaduan,
jenisPengaduanId: d.jenisPengaduanId,
},
});
}
console.log("✅ Pengaduan Masyarakat seeded successfully");
}

View File

@@ -0,0 +1,27 @@
import prisma from "@/lib/prisma";
import programKreatif from "../../data/inovasi/program-kreatif-desa/program-kreatif-desa.json";
export async function seedProgramKreatifDesa() {
console.log("🔄 Seeding Program Kreatif...");
for (const p of programKreatif) {
await prisma.programKreatif.upsert({
where: {
id: p.id,
},
update: {
name: p.name,
deskripsi: p.deskripsi,
icon: p.icon,
slug: p.slug,
},
create: {
id: p.id,
name: p.name,
deskripsi: p.deskripsi,
icon: p.icon,
slug: p.slug,
},
});
}
console.log("✅ Program Kreatif seeded successfully");
}

View File

@@ -3,7 +3,7 @@
"id": "1b7a17ea-83f7-4e73-a94d-96e2b4a623f2",
"nama": "Warung Pasar Darmasaba",
"harga": 30000,
"imageId": "cmkew56ls0000vnysrnzr9ttx",
"imageName": "YdCBnK-bWxlyHjwsk4Qie-mobile.webp",
"rating": 4.3,
"alamatUsaha": "Br. Baler Pasar, Desa Darmasaba, Kec. Abiansemal",
"kontak": "081234567890",
@@ -13,7 +13,7 @@
{
"id": "6dea2257-b710-4cd2-8d94-9b6737e658d8",
"nama": "Jajanan Pasar Bu Made",
"imageId": "cmkewaa2s0001vnysvvs9tu56",
"imageName": "TWdNTZZbTOhFTNJGGPDyG-mobile.webp",
"harga": 5000,
"rating": 4.6,
"alamatUsaha": "Jl. Raya Darmasaba, dekat Banjar Baler Pasar",
@@ -24,7 +24,7 @@
{
"id": "24c6b992-49da-4c6e-aebb-72cf89f75438",
"nama": "Sayur Segar Pak Wayan",
"imageId": "cmkewcvfq0002vnys6985nm90",
"imageName": "mtQsaKtQnhxIYVIooCkiQ-mobile.webp",
"harga": 20000,
"rating": 4.4,
"alamatUsaha": "Area Pasar Desa Darmasaba",
@@ -35,7 +35,7 @@
{
"id": "d62660a2-ac6b-428a-acf6-58cc837ef789",
"nama": "Ayam & Daging Segar Darmasaba",
"imageId": "cmkewf4u90003vnys87en35nj",
"imageName": "Ez-SkRyf_F-1gksz_amNg-mobile.webp",
"harga": 80000,
"rating": 4.2,
"alamatUsaha": "Br. Baler Pasar, Desa Darmasaba",

View File

@@ -3,24 +3,24 @@
"id": "cmkm2xlqr000mvnswdaymiho6",
"name": "Darmasaba Digital App",
"deskripsi": "<p>Aplikasi layanan desa berbasis teknologi untuk transparansi informasi dan layanan publik di Desa Darmasaba yang membantu warga mendapatkan informasi administratif, berita desa, dan pelayanan digital lainnya secara cepat dan mudah.</p>",
"imageId": "cmkm3bnkt000qvnswzhqa4upf"
"imageName": "xVrwJgdwtcoABPU6DB__Y-mobile.webp"
},
{
"id": "cmkm3b1fw000pvnswpr7hgzhp",
"name": "Program Digitalisasi Desa",
"deskripsi": "<p>Program kerja sama Desa Darmasaba bersama PT. Bali Interaktif Perkasa untuk memperkuat kapasitas pemanfaatan teknologi informasi dan komunikasi dalam administrasi desa, pelayanan publik, serta pemberdayaan digital masyarakat.</p>",
"imageId": "cmkm3b1a2000nvnswb9x48dzk"
"imageName": "JjUDrfqxuEMYSAza-s7A8-mobile.webp"
},
{
"id": "cmkm3fwmq000tvnswejmhm7yc",
"name": "Pengembangan Sistem Informasi Desa",
"deskripsi": "<p>Inisiatif pengembangan Sistem Informasi Desa yang mendukung pengelolaan data desa secara digital, termasuk data publik, laporan, dan statistik warga, sebagai bagian dari peningkatan kapabilitas teknologi informasi desa.</p>",
"imageId": "cmkm3fwg4000rvnsw5d1vbiz0"
"imageName": "42RCCpBZla4ZWxXcwx7kG-mobile.webp"
},
{
"id": "cmkm3hjp6000wvnswkuylnf53",
"name": "Pelayanan Kependudukan Berbasis Digital",
"deskripsi": "<p>Program untuk menyediakan layanan kependudukan secara digital, termasuk integrasi sistem administrasi kependudukan desa dengan sistem nasional, guna mempercepat layanan e-KTP, kartu keluarga, dan berkas kependudukan lainnya.</p>",
"imageId": "cmkm3hjhz000uvnswwqu6z9f6"
"imageName": "TrbkwnYM5rKZeHlISHCX4-mobile.webp"
}
]

View File

@@ -2,16 +2,16 @@
{
"id": "cmkm1ziyi000dvnsweg8lp3f7",
"name": "TP Posyandu Bali",
"imageId": "cmkm1zis2000bvnsw85m6wdlf"
"imageName": "qJFWokQLCaO60j0XJU_33-mobile.webp"
},
{
"id": "cmkm1ziyi000dvnsweg8lq4g8",
"name": "BRI Peduli",
"imageId": "cmkm2dgif000evnswskk0dfo9"
"imageName": "nzLJoEAfl7HkpUcYa8Y1E-mobile.webp"
},
{
"id": "cmkm1ziyi000dvnsweg8lr5h9",
"name": "Universitas Warmadewa (KKN-PMM)",
"imageId": "cmkm2fzub000hvnswnvoytlzs"
"imageName": "JFd5C2FoaZcgDQUmvp-AO-mobile.webp"
}
]

View File

@@ -1710,8 +1710,8 @@ model InfoTekno {
id String @id @default(cuid())
name String
deskripsi String @db.Text
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())

View File

@@ -37,6 +37,22 @@ import { seedPolsekTerdekat } from "./_seeder_list/keamanan/seed_polsek_terdekat
import { seedKontakDaruratKeamanan } from "./_seeder_list/keamanan/seed_kontak_darurat";
import { seedPencegahanKriminalitas } from "./_seeder_list/keamanan/seed_pencegahan_kriminalitas";
import { seedLaporanPublik } from "./_seeder_list/keamanan/seed_laporan_publik";
import { seedPasarDesa } from "./_seeder_list/ekonomi/seed_pasar_desa";
import { seedLowonganKerjaLokal } from "./_seeder_list/ekonomi/seed_lowongan_kerja_lokal";
import { seedDemografiPekerjaan } from "./_seeder_list/ekonomi/seed_demografi_pekerjaan";
import { seedSektorUnggulanDesa } from "./_seeder_list/ekonomi/seed_sektor_unggulan_desa";
import { seedProgramKemiskinan } from "./_seeder_list/ekonomi/seed_program_kemiskinan";
import { seedJumlahPendudukMiskin } from "./_seeder_list/ekonomi/seed_jumlah_penduduk_miskin";
import { seedPendudukUsiaKerjaYangMenganggur } from "./_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur";
import { seedJumlahPengangguran } from "./_seeder_list/ekonomi/seed_jumlah_pengangguran";
import { seedPendapatanAsli } from "./_seeder_list/ekonomi/seed_pendapatan_asli";
import { seedStrukturBumdes } from "./_seeder_list/ekonomi/seed_struktur_bumdes";
import { seedAjukan } from "./_seeder_list/inovasi/seed_ajukan";
import { seedDesaDigital } from "./_seeder_list/inovasi/seed_desa_digital";
import { seedLayananOnlineDesa } from "./_seeder_list/inovasi/seed_layanan_online_desa";
import { seedProgramKreatifDesa } from "./_seeder_list/inovasi/seed_program_kreatif_desa";
import { seedKolaborasiInovasi } from "./_seeder_list/inovasi/seed_kolaborasi_inovasi";
import { seedInfoTeknologi } from "./_seeder_list/inovasi/seed_info_teknologi";
(async () => {
const totalFiles = await prisma.fileStorage.count();
@@ -239,576 +255,51 @@ import { seedLaporanPublik } from "./_seeder_list/keamanan/seed_laporan_publik";
// // ====================== MENU EKONOMI ========================
// // ==================== SUBMENU PASAR DESA ====================
// console.log("🔄 Seeding Kategori Produk...");
// for (const k of kategoriProduk) {
// await prisma.kategoriProduk.upsert({
// where: {
// id: k.id,
// },
// update: {
// nama: k.nama,
// },
// create: {
// id: k.id,
// nama: k.nama,
// },
// });
// }
// console.log("✅ Kategori Produk seeded successfully");
// console.log("🔄 Seeding Pasar Desa...");
// for (const p of pasarDesa) {
// await prisma.pasarDesa.upsert({
// where: {
// id: p.id,
// },
// update: {
// nama: p.nama,
// imageId: p.imageId,
// harga: p.harga,
// rating: p.rating,
// alamatUsaha: p.alamatUsaha,
// kontak: p.kontak,
// deskripsi: p.deskripsi,
// kategoriProdukId: p.kategoriProdukId,
// },
// create: {
// id: p.id,
// nama: p.nama,
// imageId: p.imageId,
// harga: p.harga,
// rating: p.rating,
// alamatUsaha: p.alamatUsaha,
// kontak: p.kontak,
// deskripsi: p.deskripsi,
// kategoriProdukId: p.kategoriProdukId,
// },
// });
// }
// console.log("✅ Pasar Desa seeded successfully");
// console.log("🔄 Seeding Kategori To Pasar...");
// for (const p of kategoriToPasar) {
// await prisma.kategoriToPasar.upsert({
// where: {
// id: p.id,
// },
// update: {
// kategoriId: p.kategoriId,
// pasarDesaId: p.pasarDesaId,
// },
// create: {
// id: p.id,
// kategoriId: p.kategoriId,
// pasarDesaId: p.pasarDesaId,
// },
// });
// }
await seedPasarDesa();
// // ==================== SUBMENU LOWONGAN KERJA LOKAL ==========
// console.log("🔄 Seeding Lowongan Kerja Lokal...");
// for (const k of lowonganKerjaLokal) {
// await prisma.lowonganPekerjaan.upsert({
// where: {
// id: k.id,
// },
// update: {
// posisi: k.posisi,
// namaPerusahaan: k.namaPerusahaan,
// lokasi: k.lokasi,
// tipePekerjaan: k.tipePekerjaan,
// gaji: k.gaji,
// deskripsi: k.deskripsi,
// kualifikasi: k.kualifikasi,
// notelp: k.notelp,
// },
// create: {
// id: k.id,
// posisi: k.posisi,
// namaPerusahaan: k.namaPerusahaan,
// lokasi: k.lokasi,
// tipePekerjaan: k.tipePekerjaan,
// gaji: k.gaji,
// deskripsi: k.deskripsi,
// kualifikasi: k.kualifikasi,
// notelp: k.notelp,
// },
// });
// }
// console.log("✅ Lowongan Kerja Lokal seeded successfully");
await seedLowonganKerjaLokal();
// // ==================== SUBMENU STRUKTUR ORGANISASI DAN SK PENGURUS BUMDES ==========
// const sortedPosisiBumdes = flattenedPosisiBumdes.sort(
// (a, b) => a.hierarki - b.hierarki,
// );
// for (const p of sortedPosisiBumdes) {
// 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.posisiOrganisasiBumDes.upsert({
// where: { id: p.id },
// update: p,
// create: p,
// });
// }
// console.log("posisi organisasi berhasil");
// for (const p of pegawai) {
// await prisma.pegawaiBumDes.upsert({
// where: {
// id: p.id,
// },
// update: {
// namaLengkap: p.namaLengkap,
// gelarAkademik: p.gelarAkademik,
// tanggalMasuk: new Date(p.tanggalMasuk),
// email: p.email,
// telepon: p.telepon,
// alamat: p.alamat,
// posisiId: p.posisiId,
// isActive: p.isActive,
// },
// create: {
// id: p.id,
// namaLengkap: p.namaLengkap,
// gelarAkademik: p.gelarAkademik,
// tanggalMasuk: new Date(p.tanggalMasuk),
// email: p.email,
// telepon: p.telepon,
// alamat: p.alamat,
// posisiId: p.posisiId,
// isActive: p.isActive,
// },
// });
// }
// console.log("pegawai success ...");
await seedStrukturBumdes();
// // ==================== SUBMENU PENDAPATAN ASLI DESA ==========
await seedPendapatanAsli();
// // ==================== SUBMENU JUMLAH PENGANGGURAN ==========
// for (const d of detailDataPengangguran) {
// await prisma.detailDataPengangguran.upsert({
// where: {
// month_year: { month: d.month, year: d.year },
// },
// update: {
// totalUnemployment: d.totalUnemployment,
// educatedUnemployment: d.educatedUnemployment,
// uneducatedUnemployment: d.uneducatedUnemployment,
// percentageChange: d.percentageChange,
// },
// create: {
// month: d.month,
// year: d.year,
// totalUnemployment: d.totalUnemployment,
// educatedUnemployment: d.educatedUnemployment,
// uneducatedUnemployment: d.uneducatedUnemployment,
// percentageChange: d.percentageChange,
// },
// });
// }
// console.log("📊 detailDataPengangguran success ...");
await seedJumlahPengangguran();
// // ==================== SUBMENU PENDUDUK USIA KERJA ==========
// for (const p of grafikMenganggurBerdasarkanUsia) {
// await prisma.grafikMenganggurBerdasarkanUsia.upsert({
// where: {
// id: p.id,
// },
// update: {
// usia18_25: p.usia18_25,
// usia26_35: p.usia26_35,
// usia36_45: p.usia36_45,
// usia46_keatas: p.usia46_keatas,
// },
// create: {
// id: p.id,
// usia18_25: p.usia18_25,
// usia26_35: p.usia26_35,
// usia36_45: p.usia36_45,
// usia46_keatas: p.usia46_keatas,
// },
// });
// }
// console.log("📊 grafikMenganggurBerdasarkanUsia success ...");
// for (const p of grafikMenganggurBerdasarkanPendidikan) {
// await prisma.grafikMenganggurBerdasarkanPendidikan.upsert({
// where: {
// id: p.id,
// },
// update: {
// SD: p.SD,
// SMP: p.SMP,
// SMA: p.SMA,
// D3: p.D3,
// S1: p.S1,
// },
// create: {
// id: p.id,
// SD: p.SD,
// SMP: p.SMP,
// SMA: p.SMA,
// D3: p.D3,
// S1: p.S1,
// },
// });
// }
// console.log("📊 grafikMenganggurBerdasarkanUsia success ...");
await seedPendudukUsiaKerjaYangMenganggur();
// // ==================== SUBMENU PENDUDUK MISKIN =============
// console.log("🔄 Seeding Jumlah Penduduk Miskin...");
// for (const k of jumlahPendudukMiskin) {
// await prisma.grafikJumlahPendudukMiskin.upsert({
// where: {
// id: k.id,
// },
// update: {
// year: k.year,
// totalPoorPopulation: k.totalPoorPopulation,
// },
// create: {
// id: k.id,
// year: k.year,
// totalPoorPopulation: k.totalPoorPopulation,
// },
// });
// }
// console.log("✅ Jumlah Penduduk Miskin seeded successfully");
await seedJumlahPendudukMiskin();
// // ==================== SUBMENU PROGRAM KEMISKINAN =============
// for (const s of statistikKemiskinan) {
// await prisma.statistikKemiskinan.upsert({
// where: { tahun: s.tahun }, // ✅ FIX
// update: {
// jumlah: s.jumlah,
// },
// create: {
// id: s.id, // id boleh tetap
// tahun: s.tahun,
// jumlah: s.jumlah,
// },
// });
// }
// console.log("📊 Statistik Kemiskinan seeded successfully");
// console.log("🔄 Seeding Program Kemiskinan...");
// for (const k of programKemiskinan) {
// await prisma.programKemiskinan.upsert({
// where: { id: k.id },
// update: {
// nama: k.nama,
// deskripsi: k.deskripsi,
// icon: k.icon,
// statistik: {
// connect: {
// tahun: k.tahun, // 👈 BUKAN ID
// },
// },
// },
// create: {
// id: k.id,
// nama: k.nama,
// deskripsi: k.deskripsi,
// icon: k.icon,
// statistik: {
// connect: {
// tahun: k.tahun,
// },
// },
// },
// });
// }
// console.log("✅ Program Kemiskinan seeded successfully");
await seedProgramKemiskinan();
// // ==================== SUBMENU SEKTOR UNGGULAN DESA =============
// console.log("🔄 Seeding Sektor Unggulan Desa...");
// for (const k of sektorUnggulanDesa) {
// await prisma.sektorUnggulanDesa.upsert({
// where: {
// id: k.id,
// },
// update: {
// name: k.name,
// description: k.description,
// value: k.value,
// },
// create: {
// id: k.id,
// name: k.name,
// description: k.description,
// value: k.value,
// },
// });
// }
// console.log("✅ Sektor Unggulan Desa seeded successfully");
await seedSektorUnggulanDesa();
// // ==================== SUBMENU DEMOGRAFI PEKERJAAN =============
// console.log("🔄 Seeding Demografi Pekerjaan...");
// for (const k of demografiPekerjaan) {
// await prisma.dataDemografiPekerjaan.upsert({
// where: {
// id: k.id,
// },
// update: {
// pekerjaan: k.pekerjaan,
// lakiLaki: k.lakiLaki,
// perempuan: k.perempuan,
// },
// create: {
// id: k.id,
// pekerjaan: k.pekerjaan,
// lakiLaki: k.lakiLaki,
// perempuan: k.perempuan,
// },
// });
// }
// console.log("✅ Demografi Pekerjaan seeded successfully");
await seedDemografiPekerjaan();
// // ====================== MENU INOVASI ==========================
// // ====================== SUBMENU AJUKAN IDE INOVATIF ===========
// console.log("🔄 Seeding Ajukan Ide Inovatif...");
// for (const d of ajukanIde) {
// await prisma.ajukanIdeInovatif.upsert({
// where: {
// id: d.id,
// },
// update: {
// name: d.name,
// alamat: d.alamat,
// namaIde: d.namaIde,
// deskripsi: d.deskripsi,
// masalah: d.masalah,
// benefit: d.benefit,
// },
// create: {
// id: d.id,
// name: d.name,
// alamat: d.alamat,
// namaIde: d.namaIde,
// deskripsi: d.deskripsi,
// masalah: d.masalah,
// benefit: d.benefit,
// },
// });
// }
// console.log("✅ Ajukan Ide Inovatif seeded successfully");
await seedAjukan();
// // ==================== SUBMENU DESA DIGITAL ====================
// console.log("🔄 Seeding Desa Digital...");
// for (const d of desaDigital) {
// await prisma.desaDigital.upsert({
// where: {
// id: d.id,
// },
// update: {
// name: d.name,
// deskripsi: d.deskripsi,
// imageId: d.imageId,
// },
// create: {
// id: d.id,
// name: d.name,
// deskripsi: d.deskripsi,
// imageId: d.imageId,
// },
// });
// }
// console.log("✅ Desa Digital seeded successfully");
await seedDesaDigital();
// // ==================== SUBMENU LAYANAN ONLINE DESA ==========
// console.log("🔄 Seeding Jenis Layanan...");
// for (const j of jenisLayanan) {
// await prisma.jenisLayanan.upsert({
// where: {
// id: j.id,
// },
// update: {
// nama: j.nama,
// deskripsi: j.deskripsi,
// },
// create: {
// id: j.id,
// nama: j.nama,
// deskripsi: j.deskripsi,
// },
// });
// }
// console.log("✅ Jenis Layanan seeded successfully");
// console.log("🔄 Seeding Administrasi Online...");
// for (const d of administrasiOnline) {
// await prisma.administrasiOnline.upsert({
// where: {
// id: d.id,
// },
// update: {
// name: d.name,
// alamat: d.alamat,
// nomorTelepon: d.nomorTelepon,
// jenisLayananId: d.jenisLayananId,
// },
// create: {
// id: d.id,
// name: d.name,
// alamat: d.alamat,
// nomorTelepon: d.nomorTelepon,
// jenisLayananId: d.jenisLayananId,
// },
// });
// }
// console.log("✅ Administrasi Online seeded successfully");
// console.log("🔄 Seeding Jenis Pengaduan Masyarakat...");
// for (const d of jenisPengaduan) {
// await prisma.jenisPengaduan.upsert({
// where: {
// id: d.id,
// },
// update: {
// nama: d.nama,
// },
// create: {
// id: d.id,
// nama: d.nama,
// },
// });
// }
// console.log("✅ Jenis Pengaduan Masyarakat seeded successfully");
// console.log("🔄 Seeding Pengaduan Masyarakat...");
// for (const d of pengaduanMasyarakat) {
// await prisma.pengaduanMasyarakat.upsert({
// where: {
// id: d.id,
// },
// update: {
// name: d.name,
// email: d.email,
// nik: d.nik,
// nomorTelepon: d.nomorTelepon,
// judulPengaduan: d.judulPengaduan,
// lokasiKejadian: d.lokasiKejadian,
// imageId: d.imageId,
// deskripsiPengaduan: d.deskripsiPengaduan,
// jenisPengaduanId: d.jenisPengaduanId,
// },
// create: {
// id: d.id,
// name: d.name,
// email: d.email,
// nik: d.nik,
// nomorTelepon: d.nomorTelepon,
// judulPengaduan: d.judulPengaduan,
// lokasiKejadian: d.lokasiKejadian,
// imageId: d.imageId,
// deskripsiPengaduan: d.deskripsiPengaduan,
// jenisPengaduanId: d.jenisPengaduanId,
// },
// });
// }
// console.log("✅ Pengaduan Masyarakat seeded successfully");
await seedLayananOnlineDesa();
// // ==================== SUBMENU PROGRAM KREATIF ==========
// console.log("🔄 Seeding Program Kreatif...");
// for (const p of programKreatif) {
// await prisma.programKreatif.upsert({
// where: {
// id: p.id,
// },
// update: {
// name: p.name,
// deskripsi: p.deskripsi,
// icon: p.icon,
// slug: p.slug,
// },
// create: {
// id: p.id,
// name: p.name,
// deskripsi: p.deskripsi,
// icon: p.icon,
// slug: p.slug,
// },
// });
// }
// console.log("✅ Program Kreatif seeded successfully");
await seedProgramKreatifDesa();
// // ==================== SUBMENU KOLABORASI INOVASI ==========
// console.log("🔄 Seeding Kolaborasi Inovasi...");
// for (const p of kolaborasiInovasi) {
// await prisma.kolaborasiInovasi.upsert({
// where: {
// id: p.id,
// },
// update: {
// name: p.name,
// tahun: p.tahun,
// slug: p.slug,
// deskripsi: p.deskripsi,
// kolaborator: p.kolaborator,
// },
// create: {
// id: p.id,
// name: p.name,
// tahun: p.tahun,
// slug: p.slug,
// deskripsi: p.deskripsi,
// kolaborator: p.kolaborator,
// },
// });
// }
// console.log("✅ Kolaborasi Inovasi seeded successfully");
// console.log("🔄 Seeding Mitra Kolaborasi...");
// for (const p of mitraKolaborasi) {
// await prisma.mitraKolaborasi.upsert({
// where: {
// id: p.id,
// },
// update: {
// name: p.name,
// imageId: p.imageId,
// },
// create: {
// id: p.id,
// name: p.name,
// imageId: p.imageId,
// },
// });
// }
// console.log("✅ Mitra Kolaborasi seeded successfully");
await seedKolaborasiInovasi();
// // ==================== SUBMENU INFO TEKNOLOGI TEPAT GUNA ==========
// console.log("🔄 Seeding Info Teknologi...");
// for (const p of infoTeknologi) {
// await prisma.infoTekno.upsert({
// where: {
// id: p.id,
// },
// update: {
// name: p.name,
// deskripsi: p.deskripsi,
// imageId: p.imageId,
// },
// create: {
// id: p.id,
// name: p.name,
// deskripsi: p.deskripsi,
// imageId: p.imageId,
// },
// });
// }
// console.log("✅ Info Teknologi seeded successfully");
await seedInfoTeknologi();
// // ====================== MENU LINGKUNGAN ==========================
// // ==================== SUBMENU PENGELOLAAN SAMPAH ==========

View File

@@ -86,7 +86,7 @@ function Page() {
return (
<Paper p={'xl'} key={k}>
<Stack gap={"xs"}>
<Image src={v.image.link || ''} pb={10} radius={10} alt='' loading="lazy" />
<Image src={v.image?.link || "/no-image.jpg"} pb={10} radius={10} alt='' loading="lazy" />
<Title order={3} fw={'bold'} ta="left">
{v.name}
</Title>

View File

@@ -147,7 +147,7 @@ function Page() {
<Center mb="sm">
{m.image?.link ? (
<Image
src={`${process.env.NEXT_PUBLIC_BASE_URL || ''}${m.image.link}`}
src={m.image.link}
alt={m.name}
w={150}
h={100}