upd: api test

This commit is contained in:
2025-12-01 15:14:24 +08:00
parent 4cc28c4311
commit 5ecf264155
3 changed files with 88 additions and 7 deletions

View File

@@ -6,9 +6,12 @@ import {
Container, Container,
Divider, Divider,
Flex, Flex,
Group,
Input, Input,
Pagination,
Stack, Stack,
Table, Table,
Text,
Title, Title,
} from "@mantine/core"; } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
@@ -19,21 +22,27 @@ import useSWR from "swr";
export default function ListWargaPage() { export default function ListWargaPage() {
const navigate = useNavigate(); 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({ apiFetch.api.warga.list.get({
query: { query: {
search: value, 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(() => { useShallowEffect(() => {
mutate(); mutate();
}, [value]); }, [value, pages]);
return ( return (
@@ -52,6 +61,10 @@ export default function ListWargaPage() {
<Title order={3} c="gray.2"> <Title order={3} c="gray.2">
List Data Warga List Data Warga
</Title> </Title>
<Group justify="flex-end">
<Text size="sm">{`Showing ${pageSize * (pages - 1) + 1} ${Math.min(total, pageSize * pages)} of ${total}`}</Text>
<Pagination total={totalPage} value={pages} onChange={setPages} withPages={false} />
</Group>
<Input <Input
value={value} value={value}
placeholder="Cari warga..." placeholder="Cari warga..."

View File

@@ -510,6 +510,44 @@ const PengaduanRoute = new Elysia({
file: t.Any(), file: t.Any(),
folder: t.String(), folder: t.String(),
}), }),
detail: {
summary: "Upload File (FormData)",
description: "Tool untuk upload file ke folder tujuan dengan memakai FormData",
// tags: ["mcp"],
consumes: ["multipart/form-data"]
},
})
.post("/upload-file-form-data", async ({ body }) => {
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: { detail: {
summary: "Upload File (FormData)", summary: "Upload File (FormData)",
description: "Tool untuk upload file ke folder tujuan dengan memakai FormData", description: "Tool untuk upload file ke folder tujuan dengan memakai FormData",
@@ -551,7 +589,7 @@ const PengaduanRoute = new Elysia({
detail: { detail: {
summary: "Upload File (Base64)", summary: "Upload File (Base64)",
description: "Tool untuk upload file ke Seafile dalam format Base64", description: "Tool untuk upload file ke Seafile dalam format Base64",
tags: ["mcp"], // tags: ["mcp"],
consumes: ["multipart/form-data"] consumes: ["multipart/form-data"]
}, },
}) })

View File

@@ -9,9 +9,31 @@ const WargaRoute = new Elysia({
}) })
.get("/list", async ({ query }) => { .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({ const data = await prisma.warga.findMany({
skip: dataSkip,
take: 10,
where: { where: {
OR: [ 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: { detail: {
summary: "List Warga", summary: "List Warga",