1
- import { Pool , QueryResult } from 'pg'
1
+ import pg , { QueryResult } from 'pg'
2
+ // import { promises as fs } from 'fs'
3
+ import { readFileSync } from 'fs'
2
4
import { DBConfig } from '@/db/config/config'
5
+ import { promises as fs } from 'fs'
3
6
4
7
/**
5
8
* Database connection handler (Instance pattern - Although not recommended due to thread issue, this is currently the best solution)
6
9
* @class DatabaseConnector
7
10
*/
8
11
class DBConnector {
9
- private pool : Pool
12
+ private pool : pg . Pool
13
+ private conn : boolean
14
+ private static instance : DBConnector
10
15
11
16
/**
12
17
* Creates a new database connection pool
13
18
* @constructor
14
19
*/
15
- constructor ( ) {
16
- this . pool = new Pool ( DBConfig )
20
+ private constructor ( ) {
21
+ const { Pool } = pg
22
+ this . conn = false
23
+ this . pool = new Pool ( { ...DBConfig , ...{
24
+ ssl : {
25
+ rejectUnauthorized : false ,
26
+ ca : fs . readFile ( process . cwd ( ) + '/src/assets/ca-certificate.crt' )
27
+ . toString ( ) ,
28
+ sslmode : 'require' ,
29
+ } ,
30
+ } } )
31
+ }
32
+
33
+ /**
34
+ * Get the instance of the database connector
35
+ * @returns The database connector instance
36
+ */
37
+ static getInstance ( ) : DBConnector {
38
+ if ( ! DBConnector . instance ) {
39
+ DBConnector . instance = new DBConnector ( )
40
+ }
41
+ return DBConnector . instance
17
42
}
18
43
19
44
/**
@@ -27,10 +52,17 @@ class DBConnector {
27
52
text : string ,
28
53
params ?: any [ ]
29
54
) : Promise < QueryResult < T > > {
55
+ let client : pg . PoolClient | undefined = undefined
30
56
try {
31
- return await this . pool . query ( text , params )
57
+ client = await this . pool . connect ( )
58
+ this . conn = true
59
+ const result = await this . pool . query ( text , params )
60
+ await client . release ( )
61
+ this . conn = false
62
+ return result
32
63
} catch ( error ) {
33
- throw new Error (
64
+ this . conn && client . release ( )
65
+ console . log (
34
66
`Database query failed: ${
35
67
error instanceof Error ? error . message : 'Unknown error'
36
68
} `
@@ -39,4 +71,5 @@ class DBConnector {
39
71
}
40
72
}
41
73
42
- export default new DBConnector ( )
74
+ // eslint-disable-next-line import/no-anonymous-default-export
75
+ export default DBConnector . getInstance ( )
0 commit comments