summaryrefslogtreecommitdiff
path: root/lib/risk-management/repository.ts
blob: 9fec0f29190535578b191a40f6bc8721611fae24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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,
};