From 5ecf2641553177b8e11a1611e3bd59182309aa8d Mon Sep 17 00:00:00 2001 From: amal Date: Mon, 1 Dec 2025 15:14:24 +0800 Subject: [PATCH] upd: api test --- .../scr/dashboard/warga/list_warga_page.tsx | 21 ++++++++-- src/server/routes/pengaduan_route.ts | 40 ++++++++++++++++++- src/server/routes/warga_route.ts | 34 +++++++++++++++- 3 files changed, 88 insertions(+), 7 deletions(-) diff --git a/src/pages/scr/dashboard/warga/list_warga_page.tsx b/src/pages/scr/dashboard/warga/list_warga_page.tsx index a19d578..eb0772a 100644 --- a/src/pages/scr/dashboard/warga/list_warga_page.tsx +++ b/src/pages/scr/dashboard/warga/list_warga_page.tsx @@ -6,9 +6,12 @@ import { Container, Divider, Flex, + Group, Input, + Pagination, Stack, Table, + Text, Title, } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; @@ -19,21 +22,27 @@ import useSWR from "swr"; export default function ListWargaPage() { const navigate = useNavigate(); - const { data, mutate, isLoading } = useSWR("/", () => + const [pages, setPages] = useState(1); + const [value, setValue] = useState(""); + const { data, mutate } = useSWR("/", () => apiFetch.api.warga.list.get({ query: { search: value, + page: pages, }, }), ); - const list = data?.data || []; + const list = data?.data?.data || []; + const total = data?.data?.total || 0; + const totalPage = data?.data?.totalPages || 1; + const pageSize = data?.data?.pageSize || 10; + const pageNow = data?.data?.page || 1; - const [value, setValue] = useState(""); useShallowEffect(() => { mutate(); - }, [value]); + }, [value, pages]); return ( @@ -52,6 +61,10 @@ export default function ListWargaPage() { List Data Warga + + {`Showing ${pageSize * (pages - 1) + 1} – ${Math.min(total, pageSize * pages)} of ${total}`} + + { + const { file } = body; + + // Validasi file + if (!file) { + return { success: false, message: "File tidak ditemukan" }; + } + + // Rename file + const renamedFile = renameFile({ oldFile: file, newName: 'random' }); + + + // Upload ke Seafile (pastikan uploadFile menerima Blob atau ArrayBuffer) + // const buffer = await file.arrayBuffer(); + const result = await uploadFile(defaultConfigSF, renamedFile, 'pengaduan'); + if (result == 'gagal') { + return { success: false, message: "Upload gagal" }; + } + + return { + success: true, + message: "Upload berhasil", + filename: renamedFile.name, + size: renamedFile.size, + seafileResult: result + }; + }, { + body: t.Object({ + file: t.Any(), + // folder: t.String(), + }), detail: { summary: "Upload File (FormData)", description: "Tool untuk upload file ke folder tujuan dengan memakai FormData", @@ -551,7 +589,7 @@ const PengaduanRoute = new Elysia({ detail: { summary: "Upload File (Base64)", description: "Tool untuk upload file ke Seafile dalam format Base64", - tags: ["mcp"], + // tags: ["mcp"], consumes: ["multipart/form-data"] }, }) diff --git a/src/server/routes/warga_route.ts b/src/server/routes/warga_route.ts index 507b143..b711a20 100644 --- a/src/server/routes/warga_route.ts +++ b/src/server/routes/warga_route.ts @@ -9,9 +9,31 @@ const WargaRoute = new Elysia({ }) .get("/list", async ({ query }) => { - const { search } = query + const { search, page = 1 } = query + const dataSkip = page == null || page == undefined ? 0 : Number(page) * 10 - 10; + + const totalData = await prisma.warga.count({ + where: { + OR: [ + { + name: { + contains: search, + mode: "insensitive" + } + }, + { + phone: { + contains: search, + mode: "insensitive" + } + } + ] + } + }); const data = await prisma.warga.findMany({ + skip: dataSkip, + take: 10, where: { OR: [ { @@ -33,7 +55,15 @@ const WargaRoute = new Elysia({ } }) - return data + const dataFix = { + data, + total: totalData, + page: Number(page) || 1, + pageSize: 10, + totalPages: Math.ceil(totalData / 10) + }; + + return dataFix }, { detail: { summary: "List Warga",