First slice: ledger-store (journal+blobs+sqlite) and ledger-mcp (18 tools, receipt policy)
This commit is contained in:
1 parent
922e5d3128
commit
283e2b4a51
1 file changed
+64
@@ -0,0 +1,64 @@
|
||||
//! SQLite schema and migrations.
|
||||
//!
|
||||
//! The projection schema. Amounts are TEXT (decimal strings) — never REAL.
|
||||
//! Migrations are numbered SQL scripts applied in order; `SCHEMA_VERSION`
|
||||
//! is the current version.
|
||||
|
||||
/// Current schema version.
|
||||
pub const SCHEMA_VERSION: u32 = 1;
|
||||
|
||||
/// Migrations, in order. `MIGRATIONS[i]` migrates from version `i` to `i+1`.
|
||||
pub const MIGRATIONS: &[&str] = &[r#"
|
||||
CREATE TABLE IF NOT EXISTS meta(
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS accounts(
|
||||
id INTEGER PRIMARY KEY,
|
||||
code TEXT UNIQUE NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
parent INTEGER NULL,
|
||||
placeholder INTEGER NOT NULL,
|
||||
currency TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS entries(
|
||||
id INTEGER PRIMARY KEY,
|
||||
date TEXT NOT NULL,
|
||||
description TEXT NOT NULL,
|
||||
status TEXT NOT NULL,
|
||||
reversal_of INTEGER NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS lines(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
entry_id INTEGER NOT NULL,
|
||||
account_id INTEGER NOT NULL,
|
||||
side TEXT NOT NULL,
|
||||
amount TEXT NOT NULL,
|
||||
currency TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS blobs(
|
||||
sha256 TEXT PRIMARY KEY,
|
||||
size_bytes INTEGER NOT NULL,
|
||||
mime_type TEXT NOT NULL,
|
||||
original_name TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS attachments(
|
||||
id INTEGER PRIMARY KEY,
|
||||
blob_sha TEXT NOT NULL,
|
||||
entry_id INTEGER NULL,
|
||||
category TEXT NOT NULL,
|
||||
description TEXT NULL,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS events(
|
||||
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
type TEXT NOT NULL,
|
||||
payload TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_lines_entry ON lines(entry_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_entries_date ON entries(date);
|
||||
CREATE INDEX IF NOT EXISTS idx_attachments_entry ON attachments(entry_id);
|
||||
"#];
|
||||
Reference in new issue
Block a user