diff --git a/prisma/data/ppid/profile-ppid/profilePPid.json b/prisma/data/ppid/profile-ppid/profilePPid.json index 3f11b22c..3727382c 100644 --- a/prisma/data/ppid/profile-ppid/profilePPid.json +++ b/prisma/data/ppid/profile-ppid/profilePPid.json @@ -6,6 +6,6 @@ "riwayat": "", "pengalaman": "", "unggulan": "

Pemberdayaan Ekonomi dan UMKM

", - "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 ( -
- tips-keamanan -
- ); + + + + + Tips Keamanan + + + + + + + + + + ) } export default Page; diff --git a/src/app/api/[[...slugs]]/_lib/desa/index.ts b/src/app/api/[[...slugs]]/_lib/desa/index.ts index 2e36383f..18a05d7d 100644 --- a/src/app/api/[[...slugs]]/_lib/desa/index.ts +++ b/src/app/api/[[...slugs]]/_lib/desa/index.ts @@ -2,6 +2,7 @@ import Elysia from "elysia"; import Berita from "./berita"; import Pengumuman from "./pengumuman"; import ProfileDesa from "./profile/profile_desa"; + const Desa = new Elysia({ prefix: "/api/desa", tags: ["Desa"] }) .use(Berita) diff --git a/src/app/api/[[...slugs]]/_lib/fileStorage/_lib/create.ts b/src/app/api/[[...slugs]]/_lib/fileStorage/_lib/create.ts index 041962dd..b9397d00 100644 --- a/src/app/api/[[...slugs]]/_lib/fileStorage/_lib/create.ts +++ b/src/app/api/[[...slugs]]/_lib/fileStorage/_lib/create.ts @@ -44,6 +44,7 @@ const fileStorageCreate = async (context: Context) => { const data = await prisma.fileStorage.create({ data: { name: newName, + realName: file.name, // Add the original file name as realName path: rootPath, mimeType: file.type, link: `/api/fileStorage/findUnique/${newName}`, @@ -60,4 +61,4 @@ const fileStorageCreate = async (context: Context) => { }; }; -export default fileStorageCreate; +export default fileStorageCreate; \ No newline at end of file diff --git a/src/app/api/[[...slugs]]/route.ts b/src/app/api/[[...slugs]]/route.ts index 498f422f..3f2fd804 100644 --- a/src/app/api/[[...slugs]]/route.ts +++ b/src/app/api/[[...slugs]]/route.ts @@ -18,20 +18,14 @@ import uplImg from "./_lib/upl-img"; import { uplImgSingle } from "./_lib/upl-img-single"; import FileStorage from "./_lib/fileStorage"; + const ROOT = process.cwd(); if (!process.env.WIBU_UPLOAD_DIR) throw new Error("WIBU_UPLOAD_DIR is not defined"); const UPLOAD_DIR = path.join(ROOT, process.env.WIBU_UPLOAD_DIR); -const UPLOAD_DIR_IMAGE = path.join( - UPLOAD_DIR, - "public", - "assets", - "images", - "ppid", - "profile-ppid" -); +const UPLOAD_DIR_IMAGE = path.join(UPLOAD_DIR, "image"); // create uploads dir fs.mkdir(UPLOAD_DIR, { @@ -73,8 +67,8 @@ const ApiServer = new Elysia() .use(swagger({ path: "/api/docs" })) .use( staticPlugin({ - prefix: "/", // biar bisa akses dari root URL - assets: "./public", + assets: process.env.WIBU_UPLOAD_DIR || "./uploads", + prefix: "/uploads", }) ) .use(cors(corsConfig)) @@ -93,116 +87,116 @@ const ApiServer = new Elysia() }) .group("/api", (app) => app - .get("/layanan", layanan) - .get("/potensi", getPotensi) - .get( - "/img/:name", - ({ params, query }) => { - return img({ - name: params.name, - UPLOAD_DIR_IMAGE, - ROOT, - size: query.size, - }); - }, - { - params: t.Object({ - name: t.String(), - }), - query: t.Optional( - t.Object({ - size: t.Optional(t.Number()), - }) - ), - } - ) - .delete( - "/img/:name", - ({ params }) => { - return imgDel({ - name: params.name, - UPLOAD_DIR_IMAGE, - }); - }, - { - params: t.Object({ - name: t.String(), - }), - } - ) - .get( - "/imgs", - ({ query }) => { - return imgs({ - search: query.search, - page: query.page, - count: query.count, - UPLOAD_DIR_IMAGE, - }); - }, - { - query: t.Optional( - t.Object({ - page: t.Number({ default: 1 }), - count: t.Number({ default: 10 }), - search: t.String({ default: "" }), - }) - ), - } - ) - .post( - "/upl-img", - ({ body }) => { - console.log(body.title); - return uplImg({ files: body.files, UPLOAD_DIR_IMAGE }); - }, - { - body: t.Object({ - title: t.String(), - files: t.Files({ multiple: true }), - }), - } - ) - .post( - "/upl-img-single", - ({ body }) => { - return uplImgSingle({ - fileName: body.name, - file: body.file, - UPLOAD_DIR_IMAGE, - }); - }, - { - body: t.Object({ - name: t.String(), - file: t.File(), - }), - } - ) - .post( - "/upl-csv-single", - ({ body }) => { - return uplCsvSingle({ fileName: body.name, file: body.file }); - }, - { - body: t.Object({ - name: t.String(), - file: t.File(), - }), - } - ) - .post( - "/upl-csv", - ({ body }) => { - return uplCsv({ files: body.files }); - }, - { - body: t.Object({ - files: t.Files(), - }), - } - ) - ); + .get("/layanan", layanan) + .get("/potensi", getPotensi) + .get( + "/img/:name", + ({ params, query }) => { + return img({ + name: params.name, + UPLOAD_DIR_IMAGE, + ROOT, + size: query.size, + }); + }, + { + params: t.Object({ + name: t.String(), + }), + query: t.Optional( + t.Object({ + size: t.Optional(t.Number()), + }) + ), + } + ) + .delete( + "/img/:name", + ({ params }) => { + return imgDel({ + name: params.name, + UPLOAD_DIR_IMAGE, + }); + }, + { + params: t.Object({ + name: t.String(), + }), + } + ) + .get( + "/imgs", + ({ query }) => { + return imgs({ + search: query.search, + page: query.page, + count: query.count, + UPLOAD_DIR_IMAGE, + }); + }, + { + query: t.Optional( + t.Object({ + page: t.Number({ default: 1 }), + count: t.Number({ default: 10 }), + search: t.String({ default: "" }), + }) + ), + } + ) + .post( + "/upl-img", + ({ body }) => { + console.log(body.title); + return uplImg({ files: body.files, UPLOAD_DIR_IMAGE }); + }, + { + body: t.Object({ + title: t.String(), + files: t.Files({ multiple: true }), + }), + } + ) + .post( + "/upl-img-single", + ({ body }) => { + return uplImgSingle({ + fileName: body.name, + file: body.file, + UPLOAD_DIR_IMAGE, + }); + }, + { + body: t.Object({ + name: t.String(), + file: t.File(), + }), + } + ) + .post( + "/upl-csv-single", + ({ body }) => { + return uplCsvSingle({ fileName: body.name, file: body.file }); + }, + { + body: t.Object({ + name: t.String(), + file: t.File(), + }), + } + ) + .post( + "/upl-csv", + ({ body }) => { + return uplCsv({ files: body.files }); + }, + { + body: t.Object({ + files: t.Files(), + }), + } + ) +); export const GET = ApiServer.handle; export const POST = ApiServer.handle; diff --git a/src/app/darmasaba/(pages)/ekonomi/pasar-desa/page.tsx b/src/app/darmasaba/(pages)/ekonomi/pasar-desa/page.tsx index 501b0b4f..3ceabef0 100644 --- a/src/app/darmasaba/(pages)/ekonomi/pasar-desa/page.tsx +++ b/src/app/darmasaba/(pages)/ekonomi/pasar-desa/page.tsx @@ -1,11 +1,11 @@ 'use client' import colors from '@/con/colors'; -import { Box, Button, Combobox, Flex, Group, Image, InputBase, InputPlaceholder, Paper, SimpleGrid, Stack, Text, TextInput, useCombobox } from '@mantine/core'; -import { IconArrowDown, IconMapPinFilled, IconSearch, IconShoppingCartFilled, IconStarFilled } from '@tabler/icons-react'; +import { Box, Combobox, Flex, Image, InputBase, InputPlaceholder, Paper, SimpleGrid, Stack, Text, TextInput, useCombobox } from '@mantine/core'; +import { IconMapPinFilled, IconSearch, IconShoppingCartFilled, IconStarFilled } from '@tabler/icons-react'; +import { motion } from 'motion/react'; +import { useRouter } from 'next/navigation'; import { useState } from 'react'; import BackButton from '../../desa/layanan/_com/BackButto'; -import { useRouter } from 'next/navigation'; -import { motion } from 'motion/react'; const groceries = [ 'Makanan', @@ -170,9 +170,6 @@ function Page() { ) })} - - - diff --git a/src/app/percobaan/page.tsx b/src/app/percobaan/page.tsx index b431c619..f482f320 100644 --- a/src/app/percobaan/page.tsx +++ b/src/app/percobaan/page.tsx @@ -64,4 +64,4 @@ function Page() { ); } -export default Page; +export default Page; \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100644 index 00000000..e69de29b