refactor(ekonomi): consolidate Pasar Desa into UMKM module

- Remove "Pasar Desa" as a separate entity; products are now strictly linked to UMKM.
- Delete redundant Pasar Desa API endpoints and state management.
- Update Admin UI: remove "Pasar Desa" menu and unified product management under UMKM.
- Update Public UI: replace "Pasar Desa" with "UMKM" in navbar and unified hub at /darmasaba/ekonomi/umkm.
- Implement mandatory umkmId in PasarDesa model and update seeders accordingly.
- Fix UI bugs, missing imports, and invalid API filters for mandatory umkmId.
- Increment version to 0.1.18.
This commit is contained in:
2026-04-21 17:52:08 +08:00
parent e286cb4f2b
commit 1a48c15c87
45 changed files with 341 additions and 3409 deletions

View File

@@ -25,8 +25,11 @@ export async function seedPasarDesa() {
console.log("🔄 Seeding Pasar Desa...");
let i = 1;
for (const p of pasarDesa) {
let imageId: string | null = null;
const umkmId = `umkm-${i}`; // Map to umkm-1, umkm-2, etc.
i = (i % 4) + 1;
if (p.imageName) {
const image = await prisma.fileStorage.findUnique({
@@ -54,6 +57,7 @@ export async function seedPasarDesa() {
kontak: p.kontak,
imageId,
kategoriProdukId: p.kategoriProdukId,
umkmId: umkmId,
},
create: {
id: p.id,
@@ -65,6 +69,7 @@ export async function seedPasarDesa() {
kontak: p.kontak,
imageId,
kategoriProdukId: p.kategoriProdukId,
umkmId: umkmId,
},
});

View File

@@ -0,0 +1,67 @@
import prisma from "@/lib/prisma";
export const umkmData = [
{
id: "umkm-1",
nama: "Warung Pasar Darmasaba",
pemilik: "Pak Made",
deskripsi: "Warung tradisional kebutuhan pokok",
alamat: "Pasar Desa Darmasaba",
kontak: "081234567890",
kategoriId: "5c06chf7-123f-7igd-0663-5e9h76e55060"
},
{
id: "umkm-2",
nama: "Jajanan Pasar Bu Made",
pemilik: "Bu Made",
deskripsi: "Spesialis jajanan tradisional Bali",
alamat: "Pasar Desa Darmasaba",
kontak: "082145678901",
kategoriId: "4b95bge6-012e-5ged-9552-4d8g65d44959"
},
{
id: "umkm-3",
nama: "Sayur Segar Pak Wayan",
pemilik: "Pak Wayan",
deskripsi: "Sayuran lokal segar setiap hari",
alamat: "Pasar Desa Darmasaba",
kontak: "087865432109",
kategoriId: "5c06chf7-123f-8jhe-0663-5e9h76e55060"
},
{
id: "umkm-4",
nama: "Ayam & Daging Segar Darmasaba",
pemilik: "Pak Ketut",
deskripsi: "Daging ayam dan sapi segar",
alamat: "Pasar Desa Darmasaba",
kontak: "081998877665",
kategoriId: "5c06chf7-123f-9kif-0663-5e9h76e55060"
}
];
export async function seedUmkm() {
console.log("🔄 Seeding UMKM...");
for (const u of umkmData) {
await prisma.umkm.upsert({
where: { id: u.id },
update: {
nama: u.nama,
pemilik: u.pemilik,
deskripsi: u.deskripsi,
alamat: u.alamat,
kontak: u.kontak,
kategoriId: u.kategoriId,
},
create: {
id: u.id,
nama: u.nama,
pemilik: u.pemilik,
deskripsi: u.deskripsi,
alamat: u.alamat,
kontak: u.kontak,
kategoriId: u.kategoriId,
},
});
}
console.log("✅ UMKM seeded successfully");
}

View File

@@ -1434,8 +1434,8 @@ model PasarDesa {
// Data Stok & UMKM
stok Int @default(0)
umkm Umkm? @relation(fields: [umkmId], references: [id])
umkmId String?
umkm Umkm @relation(fields: [umkmId], references: [id])
umkmId String
// Relasi Penjualan
penjualan PenjualanProduk[]

View File

@@ -23,6 +23,7 @@ import { seedPendudukUsiaKerjaYangMenganggur } from "./_seeder_list/ekonomi/seed
import { seedProgramKemiskinan } from "./_seeder_list/ekonomi/seed_program_kemiskinan";
import { seedSektorUnggulanDesa } from "./_seeder_list/ekonomi/seed_sektor_unggulan_desa";
import { seedStrukturBumdes } from "./_seeder_list/ekonomi/seed_struktur_bumdes";
import { seedUmkm } from "./_seeder_list/ekonomi/seed_umkm";
import { seedAjukan } from "./_seeder_list/inovasi/seed_ajukan";
import { seedDesaDigital } from "./_seeder_list/inovasi/seed_desa_digital";
import { seedInfoTeknologi } from "./_seeder_list/inovasi/seed_info_teknologi";
@@ -274,6 +275,9 @@ import seedAssets from "./seed_assets";
await seedKeamananLingkungan();
// // ====================== MENU EKONOMI ========================
// // ==================== SUBMENU UMKM ==========================
await seedUmkm();
// // ==================== SUBMENU PASAR DESA ====================
await seedPasarDesa();