42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { Pool, QueryResult, QueryResultRow } from "pg";
|
|
|
|
export class PgClient {
|
|
private pgPool: Pool;
|
|
|
|
constructor(args: {
|
|
pool: Pool
|
|
}) {
|
|
this.pgPool = args.pool
|
|
}
|
|
|
|
public connect() {
|
|
return this.pgPool.connect()
|
|
}
|
|
|
|
/**
|
|
* Wrapper para ejecutar consultas con tipado fuerte.
|
|
* T es el formato de la respusta.
|
|
* @param text - La consulta SQL (ej. 'SELECT * FROM users WHERE id = $1')
|
|
* @param params - Los valores para los placeholders $1, $2, etc.
|
|
*/
|
|
public async query<T extends QueryResultRow = any>(
|
|
text: string,
|
|
params?: any[]
|
|
): Promise<QueryResult<T>> {
|
|
return await this.pgPool.query(text, params);
|
|
};
|
|
|
|
|
|
/**
|
|
* Función para validar la conexión al inicio.
|
|
*/
|
|
public async checkDatabaseConnection(): Promise<void> {
|
|
const client = await this.pgPool.connect();
|
|
const res = await client.query('SELECT NOW()');
|
|
console.log(`[o] Database connected successfully at: ${res.rows[0].now}`);
|
|
client.release(); // Liberamos el cliente de vuelta al pool
|
|
return;
|
|
// Si algo falla se tiene que propagar
|
|
};
|
|
}
|