Fix API Job untuk loaddata:

API – Job (Mobile)
- src/app/api/mobile/job/route.ts
- src/app/api/mobile/job/[id]/[status]/route.ts

Docs
- PROMPT-AI.md

Constants
- src/lib/constans-value/

### No Issue
This commit is contained in:
2026-02-02 17:03:51 +08:00
parent bb79a68f44
commit 2a857f54e7
4 changed files with 128 additions and 74 deletions

View File

@@ -1,3 +1,4 @@
import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue";
import prisma from "@/lib/prisma";
import _ from "lodash";
import { NextResponse } from "next/server";
@@ -12,6 +13,11 @@ async function GET(
const { id, status } = params;
const fixStatusName = _.startCase(status);
const { searchParams } = new URL(request.url);
const page = Number(searchParams.get("page"));
const takeData = PAGINATION_DEFAULT_TAKE;
const skipData = page ? page * takeData - takeData : 0;
const data = await prisma.job.findMany({
orderBy: {
updatedAt: "desc",
@@ -28,13 +34,20 @@ async function GET(
id: true,
title: true,
},
take: takeData,
skip: skipData,
});
return NextResponse.json(
{
success: true,
message: "Success get job",
data: data,
pagination: {
currentPage: page,
dataPerPage: takeData,
},
},
{ status: 200 }
);

View File

@@ -3,6 +3,7 @@ import { routeAdminMobile } from "@/lib/mobile/route-page-mobile";
import prisma from "@/lib/prisma";
import { NextResponse } from "next/server";
import { NotificationMobileBodyType } from "../../../../../types/type-mobile-notification";
import { PAGINATION_DEFAULT_TAKE } from "@/lib/constans-value/constansValue";
export { POST, GET };
@@ -45,7 +46,7 @@ async function POST(request: Request) {
message: "Berhasil disimpan",
data: create,
},
{ status: 201 }
{ status: 201 },
);
} catch (error) {
return NextResponse.json(
@@ -54,7 +55,7 @@ async function POST(request: Request) {
message: "Error create job",
reason: (error as Error).message,
},
{ status: 500 }
{ status: 500 },
);
}
}
@@ -64,94 +65,129 @@ async function GET(request: Request) {
const search = searchParams.get("search");
const category = searchParams.get("category");
const authorId = searchParams.get("authorId");
const page = Number(searchParams.get("page")) || 1;
const takeData = PAGINATION_DEFAULT_TAKE;
const skipData = page * takeData - takeData;
let fixData;
try {
if (category === "archive") {
const data = await prisma.job.findMany({
where: {
authorId: authorId,
isActive: true,
isArsip: true,
MasterStatus: {
name: "Publish",
},
// title: {
// contains: search || "",
// mode: "insensitive",
// },
},
orderBy: {
createdAt: "desc",
},
select: {
id: true,
title: true,
deskripsi: true,
authorId: true,
MasterStatus: {
select: {
name: true,
const [data, count] = await Promise.all([
prisma.job.findMany({
where: {
authorId: authorId,
isActive: true,
isArsip: true,
MasterStatus: {
name: "Publish",
},
// title: {
// contains: search || "",
// mode: "insensitive",
// },
},
Author: {
select: {
id: true,
username: true,
Profile: {
select: {
id: true,
name: true,
imageId: true,
orderBy: {
createdAt: "desc",
},
select: {
id: true,
title: true,
deskripsi: true,
authorId: true,
MasterStatus: {
select: {
name: true,
},
},
Author: {
select: {
id: true,
username: true,
Profile: {
select: {
id: true,
name: true,
imageId: true,
},
},
},
},
},
},
});
take: takeData,
skip: skipData,
}),
prisma.job.count({
where: {
authorId: authorId,
isActive: true,
isArsip: true,
MasterStatus: {
name: "Publish",
},
},
}),
]);
fixData = data;
} else if (category === "beranda") {
const data = await prisma.job.findMany({
where: {
isActive: true,
isArsip: false,
MasterStatus: {
name: "Publish",
},
title: {
contains: search || "",
mode: "insensitive",
},
},
orderBy: {
createdAt: "desc",
},
select: {
id: true,
title: true,
deskripsi: true,
authorId: true,
MasterStatus: {
select: {
name: true,
const [data, count] = await Promise.all([
prisma.job.findMany({
where: {
isActive: true,
isArsip: false,
MasterStatus: {
name: "Publish",
},
title: {
contains: search || "",
mode: "insensitive",
},
},
Author: {
select: {
id: true,
username: true,
Profile: {
select: {
id: true,
name: true,
imageId: true,
orderBy: {
createdAt: "desc",
},
select: {
id: true,
title: true,
deskripsi: true,
authorId: true,
MasterStatus: {
select: {
name: true,
},
},
Author: {
select: {
id: true,
username: true,
Profile: {
select: {
id: true,
name: true,
imageId: true,
},
},
},
},
},
},
});
take: takeData,
skip: skipData,
}),
prisma.job.count({
where: {
isActive: true,
isArsip: false,
MasterStatus: {
name: "Publish",
},
title: {
contains: search || "",
mode: "insensitive",
},
},
}),
]);
fixData = data;
}
@@ -161,8 +197,12 @@ async function GET(request: Request) {
success: true,
message: "Success get data job-vacancy",
data: fixData,
pagination: {
currentPage: page,
dataPerPage: takeData,
},
},
{ status: 200 }
{ status: 200 },
);
} catch (error) {
return NextResponse.json(
@@ -171,7 +211,7 @@ async function GET(request: Request) {
message: "Error get data job-vacancy",
reason: (error as Error).message,
},
{ status: 500 }
{ status: 500 },
);
}
}