upd: api test
This commit is contained in:
@@ -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..."
|
||||||
|
|||||||
@@ -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"]
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user