From 4e63d8427d26d0d1b366ddc53650e15f3481fc75 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 24 Jun 2025 01:44:03 +0000 Subject: (대표님/최겸) 20250624 작업사항 10시43분 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/evaluation-criteria/repository.ts | 198 ++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 lib/evaluation-criteria/repository.ts (limited to 'lib/evaluation-criteria/repository.ts') diff --git a/lib/evaluation-criteria/repository.ts b/lib/evaluation-criteria/repository.ts new file mode 100644 index 00000000..d406f45a --- /dev/null +++ b/lib/evaluation-criteria/repository.ts @@ -0,0 +1,198 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/* IMPORT */ +import { + asc, + count, + desc, + eq, +} from 'drizzle-orm'; +import { PgTransaction } from 'drizzle-orm/pg-core'; +import { + regEvalCriteria, + regEvalCriteriaDetails, + regEvalCriteriaView, + type NewRegEvalCriteria, + type NewRegEvalCriteriaDetails, +} from '@/db/schema'; + +// ---------------------------------------------------------------------------------------------------- + +/* SELECT VIEW TRANSACTION */ +async function selectRegEvalCriteria( + tx: PgTransaction, + params: { + where?: any; + orderBy?: (ReturnType | ReturnType)[]; + offset?: number; + limit?: number; + }, +) { + const { + where, + orderBy, + offset = 0, + limit = 10, + } = params; + const result = await tx + .select() + .from(regEvalCriteriaView) + .where(where) + .orderBy(...(orderBy ?? [])) + .offset(offset) + .limit(limit); + + return result; +} + +/* SELECT COUNT TRANSACTION */ +async function countRegEvalCriteria( + tx: PgTransaction, + where?: any, +) { + const result = await tx + .select({ count: count() }) + .from(regEvalCriteriaView) + .where(where); + + return result[0]?.count ?? 0; +} + +/* SELECT JOIN TRANSACTION */ +async function selectRegEvalCriteriaWithDetails( + tx: PgTransaction, + id: number, +) { + const criteria = await tx + .select() + .from(regEvalCriteria) + .where(eq(regEvalCriteria.id, id)); + + if (!criteria[0]) { + return null; + } + + const details = await tx + .select() + .from(regEvalCriteriaDetails) + .where(eq(regEvalCriteriaDetails.criteriaId, id)) + .orderBy(regEvalCriteriaDetails.orderIndex); + + return { + ...criteria[0], + criteriaDetails: details, + }; +} + +// ---------------------------------------------------------------------------------------------------- + +/* INSERT CRITERIA TRANSACTION */ +async function insertRegEvalCriteria( + tx: PgTransaction, + data: NewRegEvalCriteria, +) { + const [insertRes] = await tx + .insert(regEvalCriteria) + .values(data) + .returning(); + + return insertRes; +} + +/* INSERT CRITERIA DETAILS TRANSACTION */ +async function insertRegEvalCriteriaDetails( + tx: PgTransaction, + data: NewRegEvalCriteriaDetails, +) { + const [insertRes] = await tx + .insert(regEvalCriteriaDetails) + .values(data) + .returning(); + + return insertRes; +} + +// ---------------------------------------------------------------------------------------------------- + +/* UPDATE CRITERIA TRANSACTION */ +async function updateRegEvalCriteria( + tx: PgTransaction, + criteriaId: number, + data: Partial, +) { + const [updateRes] = await tx + .update(regEvalCriteria) + .set(data) + .where(eq(regEvalCriteria.id, criteriaId)) + .returning(); + + return updateRes; +} + +/* UPDATE CRITERIA DETAILS TRANSACTION */ +async function updateRegEvalCriteriaDetails( + tx: PgTransaction, + detailId: number, + data: Partial, +) { + const [updateRes] = await tx + .update(regEvalCriteriaDetails) + .set(data) + .where(eq(regEvalCriteriaDetails.id, detailId)) + .returning(); + + return updateRes; +} + +// ---------------------------------------------------------------------------------------------------- + +/* DELETE CRITERIA TRANSACTION */ +async function deleteRegEvalCriteria( + tx: PgTransaction, + criteriaId: number, +) { + const [deleteRes] = await tx + .delete(regEvalCriteria) + .where(eq(regEvalCriteria.id, criteriaId)) + .returning(); + + return deleteRes; +} + +/* DELETE CRITERIA TRANSACTION */ +async function deleteRegEvalCriteriaDetails( + tx: PgTransaction, + datailId: number, +) { + const [deleteRes] = await tx + .delete(regEvalCriteriaDetails) + .where(eq(regEvalCriteriaDetails.id, datailId)) + .returning(); + + return deleteRes; +} + +/* DELETE ALL TRANSACTION */ +async function deleteAllRegEvalCriteria( + tx: PgTransaction, +) { + const [deleteRes] = await tx.delete(regEvalCriteria); + + return deleteRes; +} + +// ---------------------------------------------------------------------------------------------------- + +/* EXPORT */ +export { + countRegEvalCriteria, + deleteAllRegEvalCriteria, + deleteRegEvalCriteria, + deleteRegEvalCriteriaDetails, + insertRegEvalCriteria, + insertRegEvalCriteriaDetails, + selectRegEvalCriteria, + selectRegEvalCriteriaWithDetails, + updateRegEvalCriteria, + updateRegEvalCriteriaDetails, +}; \ No newline at end of file -- cgit v1.2.3