From dd20ba9785cdbd3d61f6b014d003d3bd9646ad13 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Thu, 14 Aug 2025 00:26:53 +0000 Subject: (고건) 리스크 관리 페이지 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/risk-management/repository.ts | 123 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 lib/risk-management/repository.ts (limited to 'lib/risk-management/repository.ts') diff --git a/lib/risk-management/repository.ts b/lib/risk-management/repository.ts new file mode 100644 index 00000000..9fec0f29 --- /dev/null +++ b/lib/risk-management/repository.ts @@ -0,0 +1,123 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/* IMPORT */ +import { asc, count, desc, eq } from 'drizzle-orm'; +import { PgTransaction } from 'drizzle-orm/pg-core'; +import { + riskEvents, + risksView, + type NewRiskEvents, + type RiskEvents, +} from '@/db/schema'; + +// ---------------------------------------------------------------------------------------------------- + +/* SELECT RISKS VIEW TRANSACTION */ +async function selectRisksView( + 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(risksView) + .where(where) + .orderBy(...(orderBy ?? [])) + .offset(offset) + .limit(limit); + + return result; +} + +/* SELECT COUNT TRANSACTION */ +async function countRisksView( + tx: PgTransaction, + where?: any, +) { + const result = await tx + .select({ count: count() }) + .from(risksView) + .where(where); + + return result[0]?.count ?? 0; +} + +/* SELECT RISK EVENTS TRANSACTION */ +async function selectRiskEvents( + 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(riskEvents) + .where(where) + .orderBy(...(orderBy ?? [])) + .offset(offset) + .limit(limit); + + return result; +} + +// ---------------------------------------------------------------------------------------------------- + +/* INSERT RISK EVENTS TRANSACTION */ +async function insertRiskEvents( + tx: PgTransaction, + data: NewRiskEvents, +) { + const [insertRes] = await tx + .insert(riskEvents) + .values(data) + .returning(); + + return insertRes; +} + +// ---------------------------------------------------------------------------------------------------- + +/* UPDATE RISK EVENTS TRANSACTION */ +async function updateRiskEvents( + tx: PgTransaction, + eventId: number, + data: Partial, +) { + const [updateRes] = await tx + .update(riskEvents) + .set(data) + .where(eq(riskEvents.id, eventId)) + .returning(); + + return updateRes; +} + +// ---------------------------------------------------------------------------------------------------- + +/* EXPORT */ +export { + countRisksView, + insertRiskEvents, + selectRisksView, + selectRiskEvents, + updateRiskEvents, +}; \ No newline at end of file -- cgit v1.2.3