@@ -10,23 +10,31 @@ import prismaExtendedCoa from "../schemas/coa/extended";
10
10
11
11
// Ensure connection string has proper pool parameters
12
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' ) ;
13
+ if ( ! url || typeof url !== 'string' ) {
14
+ throw new Error ( `Invalid database URL: ${ url } ` ) ;
27
15
}
28
16
29
- return urlObj . toString ( ) ;
17
+ try {
18
+ const urlObj = new URL ( url ) ;
19
+
20
+ // Add pool parameters if not present
21
+ if ( ! urlObj . searchParams . has ( 'acquireTimeout' ) ) {
22
+ urlObj . searchParams . set ( 'acquireTimeout' , '60000' ) ;
23
+ }
24
+ if ( ! urlObj . searchParams . has ( 'connectionLimit' ) ) {
25
+ urlObj . searchParams . set ( 'connectionLimit' , '10' ) ;
26
+ }
27
+ if ( ! urlObj . searchParams . has ( 'idleTimeout' ) ) {
28
+ urlObj . searchParams . set ( 'idleTimeout' , '300000' ) ;
29
+ }
30
+ if ( ! urlObj . searchParams . has ( 'minimumIdle' ) ) {
31
+ urlObj . searchParams . set ( 'minimumIdle' , '2' ) ;
32
+ }
33
+
34
+ return urlObj . toString ( ) ;
35
+ } catch ( error ) {
36
+ throw new Error ( `Invalid database URL format: ${ url } . Error: ${ error instanceof Error ? error . message : String ( error ) } ` ) ;
37
+ }
30
38
} ;
31
39
32
40
let dmClient : ReturnType < typeof prismaExtendedDm > | null = null ;
@@ -67,12 +75,19 @@ export const getDmStatsClient = () => {
67
75
68
76
export const getCoaClient = ( ) => {
69
77
if ( ! coaClient ) {
70
- console . log ( 'Creating new COA PrismaClient instance' ) ;
71
- const connectionString = ensureConnectionString ( process . env . DATABASE_URL_COA ! ) ;
72
- coaClient = prismaExtendedCoa ( new PrismaClientCoa ( {
73
- adapter : new PrismaMariaDb ( connectionString ) ,
74
- log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
75
- } ) ) ;
78
+ try {
79
+ console . log ( 'Creating new COA PrismaClient instance' ) ;
80
+ const connectionString = ensureConnectionString ( process . env . DATABASE_URL_COA ! ) ;
81
+ console . log ( 'COA connection string configured with pool parameters' ) ;
82
+ coaClient = prismaExtendedCoa ( new PrismaClientCoa ( {
83
+ adapter : new PrismaMariaDb ( connectionString ) ,
84
+ log : process . env . NODE_ENV === 'development' ? [ 'error' , 'warn' ] : [ 'error' ] ,
85
+ } ) ) ;
86
+ } catch ( error ) {
87
+ console . error ( 'Failed to create COA PrismaClient:' , error ) ;
88
+ console . error ( 'DATABASE_URL_COA value:' , process . env . DATABASE_URL_COA ) ;
89
+ throw error ;
90
+ }
76
91
}
77
92
return coaClient ;
78
93
} ;
0 commit comments