@@ -8,6 +8,27 @@ import { PrismaMariaDb } from '@prisma/adapter-mariadb';
8
8
import prismaExtendedDm from "../schemas/dm/extended" ;
9
9
import prismaExtendedCoa from "../schemas/coa/extended" ;
10
10
11
+ // Ensure connection string has proper pool parameters
12
+ const ensureConnectionString = ( url : string ) : string => {
13
+ const urlObj = new URL ( url ) ;
14
+
15
+ // Add pool parameters if not present
16
+ if ( ! urlObj . searchParams . has ( 'acquireTimeout' ) ) {
17
+ urlObj . searchParams . set ( 'acquireTimeout' , '60000' ) ;
18
+ }
19
+ if ( ! urlObj . searchParams . has ( 'connectionLimit' ) ) {
20
+ urlObj . searchParams . set ( 'connectionLimit' , '10' ) ;
21
+ }
22
+ if ( ! urlObj . searchParams . has ( 'idleTimeout' ) ) {
23
+ urlObj . searchParams . set ( 'idleTimeout' , '300000' ) ;
24
+ }
25
+ if ( ! urlObj . searchParams . has ( 'minimumIdle' ) ) {
26
+ urlObj . searchParams . set ( 'minimumIdle' , '2' ) ;
27
+ }
28
+
29
+ return urlObj . toString ( ) ;
30
+ } ;
31
+
11
32
let dmClient : ReturnType < typeof prismaExtendedDm > | null = null ;
12
33
let dmStatsClient : PrismaClientDmStats | null = null ;
13
34
let coaClient : ReturnType < typeof prismaExtendedCoa > | null = null ;
@@ -16,20 +37,28 @@ let coverInfoClient: PrismaClientCoverInfo | null = null;
16
37
17
38
export const getDmClient = ( ) => {
18
39
if ( ! dmClient ) {
19
- console . log ( 'Creating new DM PrismaClient instance' ) ;
20
- dmClient = prismaExtendedDm ( new PrismaClientDm ( {
21
- adapter : new PrismaMariaDb ( process . env . DATABASE_URL_DM ! ) ,
22
- log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
23
- } ) ) ;
40
+ try {
41
+ console . log ( 'Creating new DM PrismaClient instance' ) ;
42
+ const connectionString = ensureConnectionString ( process . env . DATABASE_URL_DM ! ) ;
43
+ console . log ( 'DM connection string configured with pool parameters' ) ;
44
+ dmClient = prismaExtendedDm ( new PrismaClientDm ( {
45
+ adapter : new PrismaMariaDb ( connectionString ) ,
46
+ log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
47
+ } ) ) ;
48
+ } catch ( error ) {
49
+ console . error ( 'Failed to create DM PrismaClient:' , error ) ;
50
+ throw error ;
51
+ }
24
52
}
25
53
return dmClient ;
26
54
} ;
27
55
28
56
export const getDmStatsClient = ( ) => {
29
57
if ( ! dmStatsClient ) {
30
58
console . log ( 'Creating new DM Stats PrismaClient instance' ) ;
59
+ const connectionString = ensureConnectionString ( process . env . DATABASE_URL_DM_STATS ! ) ;
31
60
dmStatsClient = new PrismaClientDmStats ( {
32
- adapter : new PrismaMariaDb ( process . env . DATABASE_URL_DM_STATS ! ) ,
61
+ adapter : new PrismaMariaDb ( connectionString ) ,
33
62
log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
34
63
} ) ;
35
64
}
@@ -39,8 +68,9 @@ export const getDmStatsClient = () => {
39
68
export const getCoaClient = ( ) => {
40
69
if ( ! coaClient ) {
41
70
console . log ( 'Creating new COA PrismaClient instance' ) ;
71
+ const connectionString = ensureConnectionString ( process . env . DATABASE_URL_COA ! ) ;
42
72
coaClient = prismaExtendedCoa ( new PrismaClientCoa ( {
43
- adapter : new PrismaMariaDb ( process . env . DATABASE_URL_COA ! ) ,
73
+ adapter : new PrismaMariaDb ( connectionString ) ,
44
74
log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
45
75
} ) ) ;
46
76
}
@@ -50,8 +80,9 @@ export const getCoaClient = () => {
50
80
export const getEdgeCreatorClient = ( ) => {
51
81
if ( ! edgeCreatorClient ) {
52
82
console . log ( 'Creating new EdgeCreator PrismaClient instance' ) ;
83
+ const connectionString = ensureConnectionString ( process . env . DATABASE_URL_EDGECREATOR ! ) ;
53
84
edgeCreatorClient = new PrismaClientEdgeCreator ( {
54
- adapter : new PrismaMariaDb ( process . env . DATABASE_URL_EDGECREATOR ! ) ,
85
+ adapter : new PrismaMariaDb ( connectionString ) ,
55
86
log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
56
87
} ) ;
57
88
}
@@ -61,8 +92,9 @@ export const getEdgeCreatorClient = () => {
61
92
export const getCoverInfoClient = ( ) => {
62
93
if ( ! coverInfoClient ) {
63
94
console . log ( 'Creating new CoverInfo PrismaClient instance' ) ;
95
+ const connectionString = ensureConnectionString ( process . env . DATABASE_URL_COVER_INFO ! ) ;
64
96
coverInfoClient = new PrismaClientCoverInfo ( {
65
- adapter : new PrismaMariaDb ( process . env . DATABASE_URL_COVER_INFO ! ) ,
97
+ adapter : new PrismaMariaDb ( connectionString ) ,
66
98
log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
67
99
} ) ;
68
100
}
0 commit comments