11import { randomUUID } from 'crypto'
2+ import { QueryResult } from 'pg'
23import { truncate } from './common/string'
34import { DbService , DbServiceOptions } from './types'
45
@@ -10,44 +11,27 @@ const onError = (options: DbServiceOptions, queryId: string, error: any, sql: st
1011 options . events ?. onError ?.( queryId , `Executing SQL Failed (${ queryId } ): ${ error . message } ` , sql , parameters )
1112}
1213
14+ const queryBase = async < T = any > (
15+ options : DbServiceOptions ,
16+ sql : string ,
17+ parameters : any ,
18+ resultCreator : ( result : QueryResult ) => T ,
19+ ) => {
20+ const queryId = randomUUID ( )
21+ onQuery ( options , queryId , sql , parameters )
22+ try {
23+ const result = await options . client . query ( sql , parameters )
24+ return resultCreator ( result )
25+ }
26+ catch ( e ) {
27+ onError ( options , queryId , e , sql , parameters )
28+ throw e
29+ }
30+ }
31+
1332export const createDbService = ( options : DbServiceOptions ) : DbService => ( {
14- query : ( sql , parameters ) => {
15- const queryId = randomUUID ( )
16- onQuery ( options , queryId , sql , parameters )
17- return options . client . query ( sql , parameters )
18- . catch ( error => {
19- onError ( options , queryId , error , sql , parameters )
20- return null
21- } )
22- } ,
23- queryExists : ( sql , parameters ) => {
24- const queryId = randomUUID ( )
25- onQuery ( options , queryId , sql , parameters )
26- return options . client . query ( sql , parameters )
27- . then ( result => result . rowCount > 0 )
28- . catch ( error => {
29- onError ( options , queryId , error , sql , parameters )
30- return null
31- } )
32- } ,
33- queryGetFirstRow : ( sql , parameters ) => {
34- const queryId = randomUUID ( )
35- onQuery ( options , queryId , sql , parameters )
36- return options . client . query ( sql , parameters )
37- . then ( result => result . rows [ 0 ] )
38- . catch ( error => {
39- onError ( options , queryId , error , sql , parameters )
40- return null
41- } )
42- } ,
43- queryGetRows : ( sql , parameters ) => {
44- const queryId = randomUUID ( )
45- onQuery ( options , queryId , sql , parameters )
46- return options . client . query ( sql , parameters )
47- . then ( result => result . rows )
48- . catch ( error => {
49- onError ( options , queryId , error , sql , parameters )
50- return null
51- } )
52- } ,
33+ query : async ( sql , parameters ) => queryBase ( options , sql , parameters , r => r ) ,
34+ queryExists : async ( sql , parameters ) => queryBase ( options , sql , parameters , r => r . rows . length > 0 ) ,
35+ queryGetFirstRow : async ( sql , parameters ) => queryBase ( options , sql , parameters , r => r . rows [ 0 ] ) ,
36+ queryGetRows : async ( sql , parameters ) => queryBase ( options , sql , parameters , r => r . rows ) ,
5337} )
0 commit comments