diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 217a023f..56c84a3c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1227,3 +1227,14 @@ model GrafikMenganggurBerdasarkanPendidikan { deletedAt DateTime @default(now()) isActive Boolean @default(true) } + +// ========================================= JUMLAH PENDUDUK MISKIN ========================================= // +model GrafikJumlahPendudukMiskin { + id String @id @default(uuid()) @db.Uuid // Menggunakan UUID sebagai primary key + year Int @unique // Tahun data (e.g., 2024, 2025) + totalPoorPopulation Int // Jumlah penduduk miskin (e.g., 4800000) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime @default(now()) + isActive Boolean @default(true) +} \ No newline at end of file diff --git a/src/app/admin/(dashboard)/_state/ekonomi/jumlah-penduduk-miskin.ts b/src/app/admin/(dashboard)/_state/ekonomi/jumlah-penduduk-miskin.ts new file mode 100644 index 00000000..31c0cb8a --- /dev/null +++ b/src/app/admin/(dashboard)/_state/ekonomi/jumlah-penduduk-miskin.ts @@ -0,0 +1,180 @@ +import ApiFetch from "@/lib/api-fetch"; +import { Prisma } from "@prisma/client"; +import { toast } from "react-toastify"; +import { proxy } from "valtio"; +import { z } from "zod"; + +const templateJumlahPendudukMiskin = z.object({ + year: z.number().min(1, "Data tahun harus diisi"), + totalPoorPopulation: z.number().min(1, "Data total penduduk miskin harus diisi"), +}); + +type JumlahPendudukMiskin = Prisma.GrafikJumlahPendudukMiskinGetPayload<{ + select: { + id: true; + year: true; + totalPoorPopulation: true; + }; +}>; + +const defaultForm: Omit & { id?: string } = { + year: 0, + totalPoorPopulation: 0, +}; + +const jumlahPendudukMiskin = proxy({ + create: { + form: defaultForm, + loading: false, + async create() { + const cek = templateJumlahPendudukMiskin.safeParse( + jumlahPendudukMiskin.create.form + ); + if (!cek.success) { + const err = `[${cek.error.issues + .map((v) => `${v.path.join(".")}`) + .join("\n")}] required`; + return toast.error(err); + } + try { + jumlahPendudukMiskin.create.loading = true; + const res = await ApiFetch.api.ekonomi.jumlahpendudukmiskin[ + "create" + ].post(jumlahPendudukMiskin.create.form); + if (res.status === 200) { + const id = res.data?.data?.id; + if (id) { + toast.success("Success create"); + jumlahPendudukMiskin.create.form = { + year: 0, + totalPoorPopulation: 0, + }; + jumlahPendudukMiskin.findMany.load(); + return id; + } + } + return toast.error("failed create"); + } catch (error) { + console.log((error as Error).message); + } finally { + jumlahPendudukMiskin.create.loading = false; + } + }, + }, + findMany: { + data: null as + | Prisma.GrafikJumlahPendudukMiskinGetPayload<{ + select: { id: true; year: true; totalPoorPopulation: true; }; + }>[] + | null, + loading: false, + async load() { + const res = await ApiFetch.api.ekonomi.jumlahpendudukmiskin[ + "find-many" + ].get(); + if (res.status === 200) { + jumlahPendudukMiskin.findMany.data = res.data?.data ?? []; + } + }, + }, + findUnique: { + data: null as Prisma.GrafikJumlahPendudukMiskinGetPayload<{ + select: { id: true; year: true; totalPoorPopulation: true; }; + }> | null, + async load(id: string) { + try { + const res = await fetch( + `/api/ekonomi/jumlahpendudukmiskin/${id}` + ); + if (res.ok) { + const data = await res.json(); + jumlahPendudukMiskin.findUnique.data = data.data ?? null; + } else { + console.error("Failed to fetch data", res.status, res.statusText); + jumlahPendudukMiskin.findUnique.data = null; + } + } catch (error) { + console.error("Error loading grafik jumlah penduduk miskin:", error); + jumlahPendudukMiskin.findUnique.data = null; + } + }, + }, + update: { + id: "", + form: {...defaultForm}, + loading: false, + async byId() { + // Method implementation if needed + }, + async submit() { + const id = this.id; + if (!id) { + toast.warn("ID tidak valid"); + return null; + } + const cek = templateJumlahPendudukMiskin.safeParse(this.form); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => (v.path as string[]).join(".")).join("\n")}] required`; + toast.error(err); + return null; + } + this.loading = true; + try { + const response = await fetch( + `/api/ekonomi/jumlahpendudukmiskin/${id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(this.form), + }); + const result = await response.json(); + if (!response.ok || !result?.success) { + throw new Error(result?.message || "Gagal update data"); + } + toast.success("Berhasil update data!"); + await jumlahPendudukMiskin.findMany.load(); + return result.data; + } catch (error) { + console.error("Error update data grafik jumlah penduduk miskin:", error); + toast.error("Gagal update data grafik jumlah penduduk miskin"); + } finally { + this.loading = false; + } + }, + }, + delete: { + loading: false, + async byId(id: string) { + if (!id) return toast.warn("ID tidak valid"); + + try { + jumlahPendudukMiskin.delete.loading = true; + + const response = await fetch(`/api/ekonomi/jumlahpendudukmiskin/del/${id}`, { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + }); + + const result = await response.json(); + + if (response.ok && result?.success) { + toast.success(result.message || "Grafik jumlah penduduk miskin berhasil dihapus"); + await jumlahPendudukMiskin.findMany.load(); // refresh list + } else { + toast.error(result?.message || "Gagal menghapus grafik jumlah penduduk miskin"); + } + } catch (error) { + console.error("Gagal delete grafik jumlah penduduk miskin:", error); + toast.error("Terjadi kesalahan saat menghapus grafik jumlah penduduk miskin"); + } finally { + jumlahPendudukMiskin.delete.loading = false; + } + }, + } +}) +export default jumlahPendudukMiskin + + \ No newline at end of file diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/[id]/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/[id]/page.tsx new file mode 100644 index 00000000..505ea597 --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/[id]/page.tsx @@ -0,0 +1,80 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +'use client' + +import jumlahPendudukMiskin from '@/app/admin/(dashboard)/_state/ekonomi/jumlah-penduduk-miskin'; +import colors from '@/con/colors'; +import { Box, Button, Paper, Stack, TextInput, Title } from '@mantine/core'; +import { IconArrowBack } from '@tabler/icons-react'; +import { useParams, useRouter } from 'next/navigation'; +import { useEffect } from 'react'; +import { useProxy } from 'valtio/utils'; + +function EditJumlahPendudukMiskin() { + const router = useRouter() + const params = useParams() as { id: string } + const stateJPM = useProxy(jumlahPendudukMiskin) + + const id = params.id + + // Load data saat komponen mount + useEffect(() => { + if (id) { + stateJPM.findUnique.load(id).then(() => { + const data = stateJPM.findUnique.data + if (data) { + stateJPM.update.form = { + year: data.year || 0, + totalPoorPopulation: data.totalPoorPopulation || 0, + } + } + }) + } + }, [id]) + + const handleSubmit = async () => { + // Set the ID before submitting + stateJPM.update.id = id; + await stateJPM.update.submit(); + router.push('/admin/ekonomi/jumlah-penduduk-miskin-2024-2025') + } +return ( + + + + + + + Edit Jumlah Penduduk Miskin + { + stateJPM.update.form.year = Number(val.currentTarget.value); + }} + /> + { + stateJPM.update.form.totalPoorPopulation = Number(val.currentTarget.value); + }} + /> + + + + + ) +} + +export default EditJumlahPendudukMiskin; diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/create/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/create/page.tsx index a6a29f6c..43a74b79 100644 --- a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/create/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/create/page.tsx @@ -1,37 +1,81 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable @typescript-eslint/no-explicit-any */ 'use client' +import grafikkepuasan from '@/app/admin/(dashboard)/_state/kesehatan/data_kesehatan_warga/grafikKepuasan'; import colors from '@/con/colors'; -import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; +import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core'; import { IconArrowBack } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; - +import { useState } from 'react'; +import { useProxy } from 'valtio/utils'; +import jumlahPendudukMiskin from '../../../_state/ekonomi/jumlah-penduduk-miskin'; function CreateJumlahPendudukMiskin() { - const router = useRouter(); + const stateJPM = useProxy(jumlahPendudukMiskin); + const [chartData, setChartData] = useState([]); + const router = useRouter() + + const resetForm = () => { + stateJPM.create.form = { + year: 0, + totalPoorPopulation: 0, + } + } + + const handleSubmit = async () => { + const id = await stateJPM.create.create(); + if (id) { + const idStr = String(id); + await stateJPM.findUnique.load(idStr); + if (stateJPM.findUnique.data) { + setChartData([stateJPM.findUnique.data]); + } + } + resetForm(); + router.push("/admin/ekonomi/jumlah-penduduk-miskin-2024-2025"); + } return ( - - - - - Create Jumlah Penduduk Miskin - Tahun} - placeholder='Masukkan tahun' - /> - Jumlah Penduduk Miskin} - placeholder='Masukkan jumlah penduduk miskin' - /> - - - - - - + + + Tambah Grafik Hasil Kepuasan Masyarakat + + { + stateJPM.create.form.year = Number(val.currentTarget.value); + }} + /> + { + stateJPM.create.form.totalPoorPopulation = Number(val.currentTarget.value); + }} + /> + + + + + + + ); } diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/detail/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/detail/page.tsx deleted file mode 100644 index 9226b603..00000000 --- a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/detail/page.tsx +++ /dev/null @@ -1,58 +0,0 @@ -'use client' -import colors from '@/con/colors'; -import { Box, Button, Flex, Paper, Stack, Text } from '@mantine/core'; -import { IconArrowBack, IconEdit, IconX } from '@tabler/icons-react'; -import { useRouter } from 'next/navigation'; -// import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; - -function DetailJumlahPendudukMiskin() { - const router = useRouter(); - return ( - - - - - - - Detail Jumlah Penduduk Miskin - - - - - Tahun - 2024 - - - Jumlah Penduduk Miskin - 100 - - - - - - - - - - - - - {/* Modal Hapus - setModalHapus(false)} - onConfirm={handleHapus} - text="Apakah anda yakin ingin menghapus potensi ini?" - /> */} - - ); -} - -export default DetailJumlahPendudukMiskin; - diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/edit/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/edit/page.tsx deleted file mode 100644 index b9e94ac7..00000000 --- a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/edit/page.tsx +++ /dev/null @@ -1,38 +0,0 @@ -'use client' -import colors from '@/con/colors'; -import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; -import { IconArrowBack } from '@tabler/icons-react'; -import { useRouter } from 'next/navigation'; - - -function EditJumlahPendudukMiskin() { - const router = useRouter(); - return ( - - - - - - - - Edit Jumlah Penduduk Miskin - Tahun} - placeholder='Masukkan tahun' - /> - Jumlah Penduduk Miskin} - placeholder='Masukkan jumlah penduduk miskin' - /> - - - - - - - ); -} - -export default EditJumlahPendudukMiskin; diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx index 96db28f8..2bd3bc85 100644 --- a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx @@ -1,54 +1,167 @@ 'use client' import colors from '@/con/colors'; -import { Box, Button, Paper, Table, TableTbody, TableTd, TableTh, TableThead, TableTr } from '@mantine/core'; -import { IconDeviceImac, IconSearch } from '@tabler/icons-react'; +import { Box, Button, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title } from '@mantine/core'; +import { IconEdit, IconSearch, IconTrash } from '@tabler/icons-react'; import HeaderSearch from '../../_com/header'; import JudulList from '../../_com/judulList'; import { useRouter } from 'next/navigation'; +import { useEffect, useState } from 'react'; +import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; +import { useProxy } from 'valtio/utils'; +import jumlahPendudukMiskin from '../../_state/ekonomi/jumlah-penduduk-miskin'; +import { Bar, BarChart, Legend, XAxis, YAxis, Tooltip } from 'recharts'; +import { ModalKonfirmasiHapus } from '../../_com/modalKonfirmasiHapus'; function JumlahPendudukMiskin() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListJumlahPendudukMiskin() { +function ListJumlahPendudukMiskin({ search }: { search: string }) { + type JPMGrafik = { + id: string; + year: number; + totalPoorPopulation: number; + } + const stateJPM = useProxy(jumlahPendudukMiskin); + const [chartData, setChartData] = useState([]); + const [mounted, setMounted] = useState(false); // untuk memastikan DOM sudah ready + const isTablet = useMediaQuery('(max-width: 1024px)') + const isMobile = useMediaQuery('(max-width: 768px)') + const [modalHapus, setModalHapus] = useState(false) + const [selectedId, setSelectedId] = useState(null) const router = useRouter(); + + const handleDelete = () => { + if (selectedId) { + stateJPM.delete.byId(selectedId) + setModalHapus(false) + setSelectedId(null) + + stateJPM.findMany.load() + } + } + + useShallowEffect(() => { + setMounted(true) + stateJPM.findMany.load() + }, []) + + useEffect(() => { + setMounted(true); + if (stateJPM.findMany.data) { + setChartData(stateJPM.findMany.data.map((item) => ({ + id: item.id, + year: Number(item.year), + totalPoorPopulation: Number(item.totalPoorPopulation), + }))); + } + }, [stateJPM.findMany.data]); + + const filteredData = (stateJPM.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.year.toString().toLowerCase().includes(keyword) || + item.totalPoorPopulation.toString().toLowerCase().includes(keyword) + ); + }); + + if (!stateJPM.findMany.data) { + return ( + + + + ) + } + return ( - - - - - - Tahun - Jumlah Penduduk Miskin - Detail + + + +
+ + + Tahun + Jumlah Penduduk Miskin + Edit + Delete - - - - 2024 - 100 - - - - - -
-
+ + + {filteredData.map((item) => ( + + {item.year} + {item.totalPoorPopulation} + + + + + + + + ))} + + + + + {/* Chart */} + {!mounted && !chartData ? ( + + + Grafik Jumlah Penduduk Miskin + Belum ada data untuk ditampilkan dalam grafik + + + ) : ( + + + Grafik Jumlah Penduduk Miskin + {mounted && chartData.length > 0 && ( + + + + + + + + )} + + + )} + + + {/* Modal Konfirmasi Hapus */} + setModalHapus(false)} + onConfirm={handleDelete} + text='Apakah anda yakin ingin menghapus grafik jumlah penduduk miskin ini?' + />
); } diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/index.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/index.ts index 20aaf5ca..2d05238a 100644 --- a/src/app/api/[[...slugs]]/_lib/ekonomi/index.ts +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/index.ts @@ -6,6 +6,7 @@ import KategoriProduk from "./pasar-desa/kategori-produk"; import StrukturOrganisasi from "./struktur-organisasi"; import GrafikUsiaKerjaYangMenganggur from "./usia-kerja-yang-menganggur"; import GrafikMenganggurBerdasarkanPendidikan from "./usia-kerja-yang-menganggur/pengangguran-berdasrkan-pendidikan"; +import JumlahPendudukMiskin from "./jumlah-penduduk-miskin"; const Ekonomi = new Elysia({ prefix: "/api/ekonomi", @@ -18,5 +19,6 @@ const Ekonomi = new Elysia({ .use(StrukturOrganisasi) .use(GrafikUsiaKerjaYangMenganggur) .use(GrafikMenganggurBerdasarkanPendidikan) +.use(JumlahPendudukMiskin) export default Ekonomi \ No newline at end of file diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/create.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/create.ts new file mode 100644 index 00000000..0e9f71eb --- /dev/null +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/create.ts @@ -0,0 +1,33 @@ +import prisma from "@/lib/prisma"; +import { Prisma } from "@prisma/client"; +import { Context } from "elysia"; + +type FormCreate = Prisma.GrafikJumlahPendudukMiskinGetPayload<{ + select: { + year: true; + totalPoorPopulation: true; + }; +}>; +export default async function grafikJumlahPendudukMiskinCreate( + context: Context +) { + const body = context.body as FormCreate; + + const created = await prisma.grafikJumlahPendudukMiskin.create({ + data: { + year: body.year, + totalPoorPopulation: body.totalPoorPopulation, + }, + select: { + id: true, + year: true, + totalPoorPopulation: true, + }, + }); + + return { + success: true, + message: "Success create grafik jumlah penduduk miskin", + data: created, + }; +} diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/del.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/del.ts new file mode 100644 index 00000000..60f94d1f --- /dev/null +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/del.ts @@ -0,0 +1,43 @@ +import prisma from "@/lib/prisma" +import { Context } from "elysia" + +export default async function grafikJumlahPendudukMiskinDelete(context: Context) { + const {id} = context.params as {id: string} + + try { + const existingData = await prisma.grafikJumlahPendudukMiskin.findUnique({ + where: { + id: id, + } + }) + + if (!existingData) { + return { + success: false, + message: "Data tidak ditemukan", + data: null, + } + } + + await prisma.grafikJumlahPendudukMiskin.delete({ + where: { + id: id + } + }) + + return { + success: true, + message: "Data berhasil dihapus", + data: { + id: id, + deleted: true, + }, + } + } catch (error) { + return { + success: false, + message: error instanceof Error ? error.message : "Unknown error", + data: null, + } + } +} \ No newline at end of file diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/findMany.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/findMany.ts new file mode 100644 index 00000000..e6ad0010 --- /dev/null +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/findMany.ts @@ -0,0 +1,8 @@ +import prisma from "@/lib/prisma"; + +export default async function grafikJumlahPendudukMiskinFindMany() { + const res = await prisma.grafikJumlahPendudukMiskin.findMany(); + return { + data: res, + }; +} \ No newline at end of file diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/findUnique.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/findUnique.ts new file mode 100644 index 00000000..4192f4a2 --- /dev/null +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/findUnique.ts @@ -0,0 +1,65 @@ +import prisma from "@/lib/prisma"; + +export default async function grafikJumlahPendudukMiskinFindUnique( + request: Request +) { + const url = new URL(request.url); + const pathSegments = url.pathname.split("/"); + const id = pathSegments[pathSegments.length - 1]; + + if (!id) { + return Response.json( + { + success: false, + message: "ID tidak boleh kosong", + }, + { status: 400 } + ); + } + + try { + if (typeof id !== "string") { + return Response.json( + { + success: false, + message: "ID tidak valid", + }, + { status: 400 } + ); + } + + const data = await prisma.grafikJumlahPendudukMiskin.findUnique({ + where: { id }, + }); + + if (!data) { + return Response.json( + { + success: false, + message: "Data tidak ditemukan", + }, + { status: 404 } + ); + } + + return Response.json( + { + success: true, + message: "Berhasil mengambil data berdasarkan ID", + data, + }, + { status: 200 } + ); + } catch (e) { + console.error("Find by ID error:", e); + return Response.json( + { + success: false, + message: + "Gagal mengambil data: " + + (e instanceof Error ? e.message : "Unknown error"), + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/index.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/index.ts new file mode 100644 index 00000000..9205f477 --- /dev/null +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/index.ts @@ -0,0 +1,38 @@ +import Elysia, { t } from "elysia"; +import grafikJumlahPendudukMiskinFindMany from "./findMany"; +import grafikJumlahPendudukMiskinFindById from "./findUnique"; +import grafikJumlahPendudukMiskinUpdate from "./updt"; +import grafikJumlahPendudukMiskinCreate from "./create"; +import grafikJumlahPendudukMiskinDelete from "./del"; + +const JumlahPendudukMiskin = new Elysia({ + prefix: "/jumlahpendudukmiskin", + tags: ["Ekonomi/Jumlah Penduduk Miskin"], +}) + .get("/find-many", grafikJumlahPendudukMiskinFindMany) + .get("/:id", async (context) => { + const response = await grafikJumlahPendudukMiskinFindById(new Request(context.request)) + return response + }) + .put("/:id", grafikJumlahPendudukMiskinUpdate, { + params: t.Object({ + id: t.String(), + }), + body: t.Object({ + year: t.Number(), + totalPoorPopulation: t.Number(), + }), + }) + .post("/create", grafikJumlahPendudukMiskinCreate, { + body: t.Object({ + year: t.Number(), + totalPoorPopulation: t.Number(), + }), + }) + .delete("/del/:id", grafikJumlahPendudukMiskinDelete, { + params: t.Object({ + id: t.String(), + }), + }); + +export default JumlahPendudukMiskin; \ No newline at end of file diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/updt.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/updt.ts new file mode 100644 index 00000000..927db27c --- /dev/null +++ b/src/app/api/[[...slugs]]/_lib/ekonomi/jumlah-penduduk-miskin/updt.ts @@ -0,0 +1,48 @@ +import { Context } from "elysia"; +import prisma from "@/lib/prisma"; + +export default async function grafikJumlahPendudukMiskinUpdate(context: Context) { + const id = context.params?.id; + + if (!id) { + return { + success: false, + message: "Id tidak ditemukan", + } + } + + const existingData = await prisma.grafikJumlahPendudukMiskin.findUnique({ + where: { + id: id, + } + }) + + const {year, totalPoorPopulation} = context.body as { + year: number; + totalPoorPopulation: number; + } + + if (!existingData) { + return { + success: false, + message: "Data tidak ditemukan", + data: null, + } + } + + const updated = await prisma.grafikJumlahPendudukMiskin.update({ + where: { + id: id, + }, + data: { + year: year, + totalPoorPopulation: totalPoorPopulation, + }, + }) + + return { + success: true, + message: "Data berhasil diupdate", + data: updated, + } +}