49 lines
1.4 KiB
SQL
49 lines
1.4 KiB
SQL
CREATE TABLE IF NOT EXISTS users (
|
|||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
username TEXT UNIQUE NOT NULL,
|
||
|
|
password TEXT NOT NULL,
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS records (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
user_id INTEGER NOT NULL,
|
||
|
|
type TEXT NOT NULL CHECK(type IN ('income', 'expense')),
|
||
|
|
amount REAL NOT NULL,
|
||
|
|
category TEXT NOT NULL,
|
||
|
|
date DATETIME NOT NULL,
|
||
|
|
note TEXT,
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS recurring_bills (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
user_id INTEGER NOT NULL,
|
||
|
|
type TEXT NOT NULL CHECK(type IN ('income', 'expense')),
|
||
|
|
amount REAL NOT NULL,
|
||
|
|
category TEXT NOT NULL,
|
||
|
|
day INTEGER NOT NULL,
|
||
|
|
note TEXT,
|
||
|
|
is_active INTEGER DEFAULT 1,
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS categories (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
user_id INTEGER NOT NULL,
|
||
|
|
type TEXT NOT NULL CHECK(type IN ('income', 'expense')),
|
||
|
|
name TEXT NOT NULL,
|
||
|
|
icon TEXT NOT NULL,
|
||
|
|
is_default INTEGER DEFAULT 0,
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS migrations (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
name TEXT NOT NULL,
|
||
|
|
executed_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|