70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
import pg from "pg";
|
|
import { setTimeout } from "timers/promises";
|
|
|
|
const { Pool } = pg;
|
|
|
|
const pool = new Pool({
|
|
connectionString: process.env.DATABASE_URL,
|
|
});
|
|
|
|
const CREATE_TABLE_QUERY = `
|
|
CREATE TABLE IF NOT EXISTS alerts (
|
|
id SERIAL PRIMARY KEY,
|
|
pair VARCHAR(20) NOT NULL,
|
|
direction VARCHAR(4) NOT NULL,
|
|
previous_price NUMERIC NOT NULL,
|
|
new_price NUMERIC NOT NULL,
|
|
percent_change NUMERIC NOT NULL,
|
|
config_interval INTEGER NOT NULL,
|
|
config_threshold NUMERIC NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`;
|
|
|
|
export async function initDB() {
|
|
const maxRetries = 10;
|
|
const retryDelay = 2000;
|
|
|
|
for (let i = 0; i < maxRetries; i++) {
|
|
try {
|
|
await pool.query(CREATE_TABLE_QUERY);
|
|
console.log("[DB] Database initialized and connected.");
|
|
return;
|
|
} catch (err) {
|
|
if (i === maxRetries - 1) {
|
|
console.error("[DB] Failed to connect after all retries:", err.message);
|
|
throw err;
|
|
}
|
|
console.log(
|
|
`[DB] Connection attempt ${i + 1} failed, retrying in ${retryDelay}ms...`,
|
|
);
|
|
await setTimeout(retryDelay);
|
|
}
|
|
}
|
|
}
|
|
|
|
export async function insertIntoDB(data) {
|
|
const query = `
|
|
INSERT INTO alerts (
|
|
pair, direction, previous_price, new_price, percent_change,
|
|
config_interval, config_threshold
|
|
) VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
`;
|
|
|
|
const values = [
|
|
data.pair,
|
|
data.direction,
|
|
data.previousPrice,
|
|
data.newPrice,
|
|
data.percentChange,
|
|
data.interval,
|
|
data.threshold,
|
|
];
|
|
|
|
try {
|
|
await pool.query(query, values);
|
|
console.log(`[DB] Event saved for ${data.pair}`);
|
|
} catch (err) {
|
|
console.error(`[DB] Failed to save alert: ${err.message}`);
|
|
}
|
|
}
|