diff --git a/CHANGELOG_COMMIT.md b/CHANGELOG_COMMIT.md new file mode 100644 index 00000000..465609cc --- /dev/null +++ b/CHANGELOG_COMMIT.md @@ -0,0 +1,39 @@ +## Catatan Perubahan untuk Commit + +### Fitur: Penambahan Pagination pada Endpoint Admin Mobile + +#### Deskripsi Umum +Telah dilakukan penambahan fitur pagination pada beberapa endpoint admin mobile untuk meningkatkan kinerja dan pengalaman pengguna saat mengakses data dalam jumlah besar. + +#### File yang Diubah + +1. **src/app/api/mobile/admin/job/route.ts** + - Ditambahkan parameter `page` dari `searchParams` + - Diterapkan logika pagination dengan `takeData` (default 10) dan `skipData` + - Query `prisma.job.findMany` telah dimodifikasi untuk mendukung pagination + +2. **src/app/api/mobile/admin/event/route.ts** + - Diperbaiki definisi variabel `page` untuk memastikan tipe data yang konsisten + - Ditambahkan default value 1 untuk parameter `page` + - Perhitungan `skipData` disesuaikan agar lebih efisien + +3. **src/app/api/mobile/admin/event/[id]/participants/route.ts** + - Ditambahkan parameter `page` dari `searchParams` + - Diterapkan logika pagination dengan `takeData` (default 10) dan `skipData` + - Query `prisma.event_Peserta.findMany` telah dimodifikasi untuk mendukung pagination + +#### Tujuan Perubahan +- Meningkatkan kinerja aplikasi saat mengambil data dalam jumlah besar +- Memungkinkan pengguna untuk mengakses data secara bertahap melalui halaman-halaman +- Mengurangi beban server saat mengambil data dalam jumlah besar +- Memberikan pengalaman pengguna yang lebih baik saat mengakses data admin + +#### Cara Penggunaan +Untuk menggunakan fitur pagination, cukup tambahkan parameter `page` pada query string saat melakukan permintaan ke endpoint yang telah dimodifikasi. Contoh: +``` +GET /api/mobile/admin/job?page=2 +GET /api/mobile/admin/event?page=3 +GET /api/mobile/admin/event/{id}/participants?page=1 +``` + +Default jumlah data per halaman adalah 10 item. \ No newline at end of file diff --git a/PROMPT-AI.md b/PROMPT-AI.md index aa1645a7..173f6357 100644 --- a/PROMPT-AI.md +++ b/PROMPT-AI.md @@ -1,5 +1,5 @@ -File utama: src/app/api/mobile/admin/master/business-field/route.ts +File utama: src/app/api/mobile/admin/event/[id]/participants/route.ts Terapkan pagination pada file "File utama" pada method GET Analisa juga file "File utama", jika belum memiliki page dari seachParams maka terapkan. Juga pastikan take dan skip sudah sesuai dengan pagination. Buat default nya menjadi 10 untuk take data diff --git a/src/app/api/mobile/admin/event/[id]/participants/route.ts b/src/app/api/mobile/admin/event/[id]/participants/route.ts index 04565365..95f5f4c9 100644 --- a/src/app/api/mobile/admin/event/[id]/participants/route.ts +++ b/src/app/api/mobile/admin/event/[id]/participants/route.ts @@ -1,9 +1,15 @@ -import { NextResponse } from "next/server"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; import prisma from "@/lib/prisma"; +import { NextResponse } from "next/server"; export { GET }; async function GET(request: Request, { params }: { params: { id: string } }) { + const { searchParams } = new URL(request.url); + const page = Number(searchParams.get("page")) || 1; + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; + try { const { id } = params; @@ -12,6 +18,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { eventId: id, }, select: { + id: true, eventId: true, userId: true, isPresent: true, @@ -35,6 +42,8 @@ async function GET(request: Request, { params }: { params: { id: string } }) { }, }, }, + take: page ? takeData : undefined, + skip: page ? skipData : undefined, }); return NextResponse.json( diff --git a/src/app/api/mobile/admin/event/route.ts b/src/app/api/mobile/admin/event/route.ts index 65b0f990..6e66a750 100644 --- a/src/app/api/mobile/admin/event/route.ts +++ b/src/app/api/mobile/admin/event/route.ts @@ -1,7 +1,8 @@ -import _ from "lodash"; import { prisma } from "@/lib"; -import { NextResponse } from "next/server"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; +import _ from "lodash"; import moment from "moment"; +import { NextResponse } from "next/server"; export { GET }; @@ -11,13 +12,12 @@ async function GET(request: Request) { const fixStatus = _.startCase(category || ""); const search = searchParams.get("search"); - const page = searchParams.get("page"); - const takeData = 10; - const skipData = Number(page) * takeData - takeData; + const page = Number(searchParams.get("page")) || 1; + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; let fixData; - console.log("[CATEGORY]", category); - // console.log("[FIX STATUS]", fixStatus); + try { if (category === "dashboard") { @@ -71,7 +71,6 @@ async function GET(request: Request) { typeOfEvent, }; } else if (category === "history") { - console.log("[HISTORY HERE]"); const data = await prisma.event.findMany({ take: page ? takeData : undefined, @@ -151,21 +150,22 @@ async function GET(request: Request) { }, }, select: { - id: true, - title: true, - tanggal: true, - Author: { - select: { - id: true, - username: true, - Profile: { - select: { - name: true, - }, + id: true, + title: true, + tanggal: true, + tanggalSelesai: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, }, }, }, }, + }, }); fixData = data; @@ -177,7 +177,7 @@ async function GET(request: Request) { message: `Success get data event ${category}`, data: fixData, }, - { status: 200 } + { status: 200 }, ); } catch (error) { console.log(`[ERROR GET DATA EVENT: ${category}]`, error); @@ -187,7 +187,7 @@ async function GET(request: Request) { message: `Error get data event ${category}`, reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } diff --git a/src/app/api/mobile/admin/job/route.ts b/src/app/api/mobile/admin/job/route.ts index cf986c09..a0429bb7 100644 --- a/src/app/api/mobile/admin/job/route.ts +++ b/src/app/api/mobile/admin/job/route.ts @@ -1,6 +1,7 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import { prisma } from "@/lib"; +import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue"; export { GET }; @@ -8,6 +9,9 @@ async function GET(request: Request, { params }: { params: { name: string } }) { const { searchParams } = new URL(request.url); const category = searchParams.get("category"); const search = searchParams.get("search"); + const page = Number(searchParams.get("page")) || 1; + const takeData = PAGINATION_DEFAULT_TAKE; + const skipData = page * takeData - takeData; let fixData; try { @@ -66,6 +70,8 @@ async function GET(request: Request, { params }: { params: { name: string } }) { title: true, Author: true, }, + take: page ? takeData : undefined, + skip: page ? skipData : undefined, }); }