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,29 +1,29 @@
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";
import { HTTPException } from "hono/http-exception"; import { HTTPException } from "hono/http-exception";
import db from "../../drizzle"; import db from "../../drizzle";
import { assessments } from "../../drizzle/schema/assessments"; import { assessments } from "../../drizzle/schema/assessments";
import { respondents } from "../../drizzle/schema/respondents"; import { respondents } from "../../drizzle/schema/respondents";
import { users } from "../../drizzle/schema/users"; import { users } from "../../drizzle/schema/users";
import HonoEnv from "../../types/HonoEnv"; import HonoEnv from "../../types/HonoEnv";
import requestValidator from "../../utils/requestValidator"; import requestValidator from "../../utils/requestValidator";
import authInfo from "../../middlewares/authInfo"; import authInfo from "../../middlewares/authInfo";
export const assessmentFormSchema = z.object({ export const assessmentFormSchema = z.object({
respondentId: z.string().min(1), respondentId: z.string().min(1),
status: z.enum(["menunggu konfirmasi", "diterima", "ditolak", "selesai"]), status: z.enum(["menunggu konfirmasi", "diterima", "ditolak", "selesai"]),
reviewedBy: z.string().min(1), reviewedBy: z.string().min(1),
validatedBy: z.string().min(1), validatedBy: z.string().min(1),
validatedAt: z.string().optional(), validatedAt: z.string().optional(),
}); });
export const assessmentUpdateSchema = assessmentFormSchema.extend({ export const assessmentUpdateSchema = assessmentFormSchema.extend({
validatedAt: z.string().optional().or(z.literal("")), validatedAt: z.string().optional().or(z.literal("")),
}); });
const assessmentsRequestManagementRoutes = new Hono<HonoEnv>() const assessmentsRequestManagementRoutes = new Hono<HonoEnv>()
.use(authInfo) .use(authInfo)
/** /**
* Get All Assessments (With Metadata) * Get All Assessments (With Metadata)
@ -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,
@ -170,4 +188,4 @@
export default assessmentsRequestManagementRoutes; export default assessmentsRequestManagementRoutes;