64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
const { Pool } = require('pg');
|
|
|
|
const pool = new Pool({
|
|
user: process.env.DB_USER,
|
|
password: process.env.DB_PSW,
|
|
host: process.env.DB_HOST,
|
|
port: process.env.DB_PORT,
|
|
max: 10,
|
|
idleTimeoutMillis: 30000,
|
|
connectionTimeoutMillis: 5000,
|
|
})
|
|
|
|
const dbs = {
|
|
data: { name: process.env.DATA_DB },
|
|
sensors: { name: process.env.SENSORS_DB }
|
|
}
|
|
|
|
console.log('Database configuration:', {
|
|
host: process.env.DB_HOST,
|
|
port: process.env.DB_PORT,
|
|
user: process.env.DB_USER,
|
|
password: process.env.DB_PSW,
|
|
database: Object.fromEntries(Object.entries(dbs).map(([k, v]) => [k, v.name]))
|
|
});
|
|
|
|
function getPool(db) {
|
|
const dbConfig = dbs[db];
|
|
if (!dbConfig) throw new Error(`Database ${db} not configured`);
|
|
return new Pool({ ...pool.options, database: dbConfig.name });
|
|
}
|
|
|
|
async function checkConnection(db) {
|
|
try {
|
|
await getPool(db).query('SELECT NOW()');
|
|
return true;
|
|
} catch (err) {
|
|
console.error(`Error connecting to ${db} database`, err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async function query(db, text, params) {
|
|
const pool = getPool(db);
|
|
return pool.query(text, params);
|
|
}
|
|
|
|
async function init() {
|
|
try {
|
|
await query('sensors', `
|
|
CREATE TABLE IF NOT EXISTS sensors (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(255) UNIQUE NOT NULL,
|
|
code_hash TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
`);
|
|
} catch (err) {
|
|
console.error('Error creating sensors table', err);
|
|
}
|
|
}
|
|
|
|
init();
|
|
|
|
module.exports = { checkConnection, query }; |