z1amez's picture
v.1
2dddd1f
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDb = getDb;
const sqlite3_1 = __importDefault(require("sqlite3"));
const sqlite_1 = require("sqlite");
const path_1 = __importDefault(require("path"));
const dbPath = path_1.default.resolve(__dirname, '../database.sqlite');
let dbInstance = null;
async function getDb() {
if (dbInstance)
return dbInstance;
dbInstance = await (0, sqlite_1.open)({
filename: dbPath,
driver: sqlite3_1.default.Database
});
// Enforce foreign key constraints
await dbInstance.exec('PRAGMA foreign_keys = ON');
await dbInstance.exec(`
CREATE TABLE IF NOT EXISTS wallets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
type TEXT NOT NULL,
currency TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS transactions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type TEXT NOT NULL, -- 'income' | 'expense' | 'transfer'
amount REAL NOT NULL,
currency TEXT NOT NULL,
wallet_id INTEGER,
to_wallet_id INTEGER, -- For transfers
category TEXT,
note TEXT,
date TEXT NOT NULL,
country_id TEXT, -- For travel mode
FOREIGN KEY(wallet_id) REFERENCES wallets(id),
FOREIGN KEY(to_wallet_id) REFERENCES wallets(id)
);
CREATE TABLE IF NOT EXISTS exchanges (
id INTEGER PRIMARY KEY AUTOINCREMENT,
from_amount REAL NOT NULL,
from_currency TEXT NOT NULL,
to_amount REAL NOT NULL,
to_currency TEXT NOT NULL,
rate REAL NOT NULL,
date TEXT NOT NULL,
note TEXT
);
CREATE TABLE IF NOT EXISTS loans (
id INTEGER PRIMARY KEY AUTOINCREMENT,
person TEXT NOT NULL,
type TEXT NOT NULL, -- 'borrowed_from_me' | 'owed_by_me'
amount REAL NOT NULL,
currency TEXT NOT NULL,
paid REAL DEFAULT 0,
date TEXT NOT NULL,
note TEXT
);
`);
// Insert default wallets if empty
const walletCount = await dbInstance.get('SELECT COUNT(*) as count FROM wallets');
if (walletCount.count === 0) {
await dbInstance.exec(`
INSERT INTO wallets (name, type, currency) VALUES
('Cash', 'cash', 'USD'),
('FIB', 'bank', 'IQD'),
('SuperQi', 'ewallet', 'IQD'),
('Alipay', 'ewallet', 'RMB'),
('WeChat Pay', 'ewallet', 'RMB');
`);
}
return dbInstance;
}