webpods
Version:
Append-only log service with OAuth authentication
65 lines • 1.82 kB
JavaScript
/**
* Database connection using pg-promise
*/
import pgPromise from "pg-promise";
import { createLogger } from "./logger.js";
import { getConfig } from "./config-loader.js";
const logger = createLogger("webpods:db");
// Initialize pg-promise
const pgp = pgPromise({
// Log queries in debug mode
query(e) {
if (process.env.LOG_LEVEL === "debug") {
logger.debug("Query", { query: e.query, params: e.params });
}
},
error(err, e) {
logger.error("Database error", {
error: err,
query: e?.query,
params: e?.params,
});
},
});
// Database connection instance
let db = null;
export function getDb() {
if (!db) {
const appConfig = getConfig();
const connectionConfig = {
host: appConfig.database.host,
port: appConfig.database.port,
database: appConfig.database.database,
user: appConfig.database.user,
password: appConfig.database.password,
};
db = pgp(connectionConfig);
logger.info("Database connection established", {
host: connectionConfig.host,
database: connectionConfig.database,
});
}
return db;
}
export async function closeDb() {
if (db) {
await db.$pool.end();
db = null;
logger.info("Database connection closed");
}
}
// Helper to check if database is connected
export async function checkDbConnection() {
try {
const database = getDb();
await database.one("SELECT 1 as result");
return true;
}
catch (error) {
logger.error("Database connection check failed", { error });
return false;
}
}
// Export pgp for use in transactions and helpers
export { pgp };
//# sourceMappingURL=db.js.map