Pull Request branch dev-clone to main #1

Merged
gitea merged 429 commits from dev-clone into main 2024-12-23 09:31:34 +00:00
Showing only changes of commit dfa3cd9f03 - Show all commits

View File

@ -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,