Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 75 lines 2.0 kB view raw
1import { withPrefix } from "@hey/helpers/logger"; 2import dotenv from "dotenv"; 3import type { IDatabase, IFormatting, IHelpers, IMain } from "pg-promise"; 4import pgPromise from "pg-promise"; 5import type pg from "pg-promise/typescript/pg-subset"; 6import type { IConnectionParameters } from "pg-promise/typescript/pg-subset"; 7 8dotenv.config({ override: true }); 9 10type DatabaseInstance = IDatabase<unknown, pg.IClient>; 11 12interface InitializeDbResult { 13 instance: DatabaseInstance; 14 pg: IMain<unknown, pg.IClient>; 15} 16 17type DatabaseParams = null | Record<string, any>; 18type DatabaseQuery = string; 19 20class Database { 21 private _connectionBase: IConnectionParameters = { 22 connectionString: process.env.LENS_DATABASE_URL, 23 idleTimeoutMillis: 30000, 24 max: 15 25 }; 26 27 private _readDb: DatabaseInstance; 28 public as: IFormatting; 29 public helpers: IHelpers; 30 31 constructor() { 32 const readDb = this._initializeDb(); 33 this._readDb = readDb.instance; 34 this.helpers = readDb.pg.helpers; 35 this.as = readDb.pg.as; 36 } 37 38 private _initializeDb(): InitializeDbResult { 39 return this._createDbInstance(this._connectionBase); 40 } 41 42 private _createDbInstance( 43 connectionParameters: IConnectionParameters 44 ): InitializeDbResult { 45 const pgp = pgPromise({ 46 error: (error: unknown) => { 47 const log = withPrefix("[API]"); 48 const errorMessage = 49 error instanceof Error ? error.message : String(error); 50 log.error(`LENS POSTGRES ERROR WITH TRACE: ${errorMessage}`); 51 } 52 }); 53 54 return { 55 instance: pgp(connectionParameters), 56 pg: pgp 57 }; 58 } 59 60 public multi<T = unknown>( 61 query: DatabaseQuery, 62 params: DatabaseParams = null 63 ): Promise<T[][]> { 64 return this._readDb.multi<T>(query, params); 65 } 66 67 public query<T = unknown>( 68 query: DatabaseQuery, 69 params: DatabaseParams = null 70 ): Promise<T> { 71 return this._readDb.query<T>(query, params); 72 } 73} 74 75export default new Database();