first commit
This commit is contained in:
73
internal/db/migrations/0001_init.sql
Normal file
73
internal/db/migrations/0001_init.sql
Normal file
@@ -0,0 +1,73 @@
|
||||
CREATE TABLE users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
pubkey TEXT NOT NULL UNIQUE,
|
||||
username TEXT NOT NULL UNIQUE COLLATE NOCASE,
|
||||
subscription_type TEXT NOT NULL,
|
||||
expires_at TEXT,
|
||||
is_active INTEGER NOT NULL DEFAULT 1,
|
||||
manual_username INTEGER NOT NULL DEFAULT 0,
|
||||
last_synced_at TEXT,
|
||||
expiring_reminder_sent_at TEXT,
|
||||
deactivated_at TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_users_active ON users(is_active);
|
||||
CREATE INDEX idx_users_expires ON users(expires_at);
|
||||
CREATE INDEX idx_users_deactivated ON users(deactivated_at);
|
||||
|
||||
CREATE TABLE pending_invoices (
|
||||
payment_hash TEXT PRIMARY KEY,
|
||||
payment_request TEXT NOT NULL,
|
||||
username TEXT NOT NULL,
|
||||
pubkey TEXT NOT NULL,
|
||||
subscription_type TEXT NOT NULL,
|
||||
years INTEGER NOT NULL DEFAULT 1,
|
||||
amount_sats INTEGER NOT NULL,
|
||||
expires_at TEXT NOT NULL,
|
||||
paid INTEGER NOT NULL DEFAULT 0,
|
||||
is_renewal INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_pending_unpaid ON pending_invoices(paid, expires_at);
|
||||
CREATE INDEX idx_pending_username ON pending_invoices(username, paid);
|
||||
|
||||
CREATE TABLE webhook_outbox (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
event_type TEXT NOT NULL,
|
||||
payload TEXT NOT NULL,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
last_attempt_at TEXT,
|
||||
next_attempt_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
last_error TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_webhook_outbox_pending ON webhook_outbox(status, next_attempt_at);
|
||||
|
||||
CREATE TABLE dm_outbox (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
event_type TEXT NOT NULL,
|
||||
pubkey TEXT NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
last_attempt_at TEXT,
|
||||
next_attempt_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
last_error TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_dm_outbox_pending ON dm_outbox(status, next_attempt_at);
|
||||
CREATE INDEX idx_dm_outbox_pubkey ON dm_outbox(pubkey, event_type);
|
||||
|
||||
CREATE TABLE audit_log (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
action TEXT NOT NULL,
|
||||
actor TEXT NOT NULL,
|
||||
pubkey TEXT,
|
||||
details TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
9
internal/db/migrations/0002_idempotent_target.sql
Normal file
9
internal/db/migrations/0002_idempotent_target.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
-- target_expires_at captures the expiry value computed at first confirmation
|
||||
-- attempt. Subsequent attempts (e.g. after a crash mid-confirm) read this
|
||||
-- value back so user mutation stays idempotent.
|
||||
ALTER TABLE pending_invoices ADD COLUMN target_expires_at TEXT;
|
||||
|
||||
CREATE INDEX idx_audit_pubkey ON audit_log(pubkey);
|
||||
CREATE INDEX idx_audit_created ON audit_log(created_at);
|
||||
CREATE INDEX idx_webhook_outbox_status ON webhook_outbox(status, created_at);
|
||||
CREATE INDEX idx_dm_outbox_status ON dm_outbox(status, created_at);
|
||||
Reference in New Issue
Block a user