summaryrefslogtreecommitdiff
path: root/lib/risk-management/repository.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-08-14 00:26:53 +0000
committerjoonhoekim <26rote@gmail.com>2025-08-14 00:26:53 +0000
commitdd20ba9785cdbd3d61f6b014d003d3bd9646ad13 (patch)
tree4e99d62311a6c115dbc894084714a29c34bca11a /lib/risk-management/repository.ts
parent33be47506f0aa62b969d82521580a29e95080268 (diff)
(고건) 리스크 관리 페이지 추가
Diffstat (limited to 'lib/risk-management/repository.ts')
-rw-r--r--lib/risk-management/repository.ts123
1 files changed, 123 insertions, 0 deletions
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<any, any, any>,
+ params: {
+ where?: any;
+ orderBy?: (ReturnType<typeof asc> | ReturnType<typeof desc>)[];
+ 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<any, any, any>,
+ 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<any, any, any>,
+ params: {
+ where?: any;
+ orderBy?: (ReturnType<typeof asc> | ReturnType<typeof desc>)[];
+ 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<any, any, any>,
+ data: NewRiskEvents,
+) {
+ const [insertRes] = await tx
+ .insert(riskEvents)
+ .values(data)
+ .returning();
+
+ return insertRes;
+}
+
+// ----------------------------------------------------------------------------------------------------
+
+/* UPDATE RISK EVENTS TRANSACTION */
+async function updateRiskEvents(
+ tx: PgTransaction<any, any, any>,
+ eventId: number,
+ data: Partial<RiskEvents>,
+) {
+ 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