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}`); } }