const path = require('path'); const Database = require('better-sqlite3'); // npm run reset-db const db = new Database(path.join(__dirname, 'data', 'payments.db')); db.pragma('journal_mode = WAL'); db.exec(` CREATE TABLE IF NOT EXISTS payments ( id INTEGER PRIMARY KEY AUTOINCREMENT, customer_name TEXT NOT NULL, email TEXT, phone TEXT, address TEXT, items_json TEXT NOT NULL, total REAL NOT NULL DEFAULT 0, currency TEXT NOT NULL DEFAULT 'AUD', payment_link TEXT, status TEXT NOT NULL DEFAULT 'created', created_at TEXT NOT NULL DEFAULT (datetime('now')) ); `); // Migrate existing databases that predate the currency column. const hasCurrency = db .prepare(`PRAGMA table_info(payments)`) .all() .some((col) => col.name === 'currency'); if (!hasCurrency) { db.exec(`ALTER TABLE payments ADD COLUMN currency TEXT NOT NULL DEFAULT 'AUD'`); } const insertStmt = db.prepare(` INSERT INTO payments (customer_name, email, phone, address, items_json, total, currency, payment_link, status) VALUES (@customer_name, @email, @phone, @address, @items_json, @total, @currency, @payment_link, @status) `); function savePayment(record) { const info = insertStmt.run(record); return getPayment(info.lastInsertRowid); } function getPayment(id) { return db.prepare('SELECT * FROM payments WHERE id = ?').get(id); } function listPayments(limit = 100) { return db .prepare('SELECT * FROM payments ORDER BY id DESC LIMIT ?') .all(limit); } function countPayments() { return db.prepare('SELECT COUNT(*) AS n FROM payments').get().n; } module.exports = { savePayment, getPayment, listPayments, countPayments };