Files
sf-sim/packages/shared/infrastructure/PgClient.ts

42 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-02-02 16:59:12 +01:00
import { Pool, QueryResult, QueryResultRow } from "pg";
export class PgClient {
2026-02-02 16:59:12 +01:00
private pgPool: Pool;
constructor(args: {
pool: Pool
}) {
this.pgPool = args.pool
}
public connect() {
return this.pgPool.connect()
}
2026-02-02 16:59:12 +01:00
/**
* 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>(
2026-02-02 16:59:12 +01:00
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
};
2026-02-02 16:59:12 +01:00
}