Pull Request branch dev-clone to main #1
|
|
@ -1,4 +1,4 @@
|
||||||
import { and, eq, ilike, or, sql } from "drizzle-orm";
|
import { and, eq, ilike, or, sql, desc } from "drizzle-orm";
|
||||||
import { Hono } from "hono";
|
import { Hono } from "hono";
|
||||||
import checkPermission from "../../middlewares/checkPermission";
|
import checkPermission from "../../middlewares/checkPermission";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
@ -49,16 +49,10 @@
|
||||||
async (c) => {
|
async (c) => {
|
||||||
const { page, limit, q } = c.req.valid("query");
|
const { page, limit, q } = c.req.valid("query");
|
||||||
|
|
||||||
const totalCountQuery = sql<number>`(SELECT count(*) FROM ${assessments})`;
|
// Query untuk menghitung total jumlah item (totalCountQuery)
|
||||||
|
const assessmentCountQuery = await db
|
||||||
const result = await db
|
|
||||||
.select({
|
.select({
|
||||||
idPermohonan: assessments.id,
|
count: sql<number>`count(*)`,
|
||||||
namaResponden: users.name,
|
|
||||||
namaPerusahaan: respondents.companyName,
|
|
||||||
status: assessments.status,
|
|
||||||
tanggal: assessments.createdAt,
|
|
||||||
fullCount: totalCountQuery,
|
|
||||||
})
|
})
|
||||||
.from(assessments)
|
.from(assessments)
|
||||||
.leftJoin(respondents, eq(assessments.respondentId, respondents.id))
|
.leftJoin(respondents, eq(assessments.respondentId, respondents.id))
|
||||||
|
|
@ -68,10 +62,37 @@
|
||||||
? or(
|
? or(
|
||||||
ilike(users.name, `%${q}%`),
|
ilike(users.name, `%${q}%`),
|
||||||
ilike(respondents.companyName, `%${q}%`),
|
ilike(respondents.companyName, `%${q}%`),
|
||||||
|
sql`CAST(${assessments.status} AS TEXT) ILIKE ${'%' + q + '%'}`,
|
||||||
|
eq(assessments.id, q)
|
||||||
|
)
|
||||||
|
: undefined
|
||||||
|
);
|
||||||
|
|
||||||
|
const totalItems = Number(assessmentCountQuery[0]?.count) || 0;
|
||||||
|
|
||||||
|
// Query utama untuk mendapatkan data permohonan assessment
|
||||||
|
const result = await db
|
||||||
|
.select({
|
||||||
|
idPermohonan: assessments.id,
|
||||||
|
namaResponden: users.name,
|
||||||
|
namaPerusahaan: respondents.companyName,
|
||||||
|
status: assessments.status,
|
||||||
|
tanggal: assessments.createdAt,
|
||||||
|
})
|
||||||
|
.from(assessments)
|
||||||
|
.leftJoin(respondents, eq(assessments.respondentId, respondents.id))
|
||||||
|
.leftJoin(users, eq(respondents.userId, users.id))
|
||||||
|
.where(
|
||||||
|
q
|
||||||
|
? or(
|
||||||
|
ilike(users.name, `%${q}%`),
|
||||||
|
ilike(respondents.companyName, `%${q}%`),
|
||||||
|
sql`CAST(${assessments.status} AS TEXT) ILIKE ${'%' + q + '%'}`,
|
||||||
eq(assessments.id, q)
|
eq(assessments.id, q)
|
||||||
)
|
)
|
||||||
: undefined
|
: undefined
|
||||||
)
|
)
|
||||||
|
.orderBy(desc(assessments.createdAt))
|
||||||
.offset(page * limit)
|
.offset(page * limit)
|
||||||
.limit(limit);
|
.limit(limit);
|
||||||
|
|
||||||
|
|
@ -85,10 +106,8 @@
|
||||||
})),
|
})),
|
||||||
_metadata: {
|
_metadata: {
|
||||||
currentPage: page,
|
currentPage: page,
|
||||||
totalPages: Math.ceil(
|
totalPages: Math.ceil(totalItems / limit),
|
||||||
(Number(result[0]?.fullCount) ?? 0) / limit
|
totalItems,
|
||||||
),
|
|
||||||
totalItems: Number(result[0]?.fullCount) ?? 0,
|
|
||||||
perPage: limit,
|
perPage: limit,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -104,7 +123,6 @@
|
||||||
|
|
||||||
const queryResult = await db
|
const queryResult = await db
|
||||||
.select({
|
.select({
|
||||||
// id: assessments.id,
|
|
||||||
tanggal: assessments.createdAt,
|
tanggal: assessments.createdAt,
|
||||||
nama: users.name,
|
nama: users.name,
|
||||||
posisi: respondents.position,
|
posisi: respondents.position,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user