74 lines
2.3 KiB
SQL
74 lines
2.3 KiB
SQL
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
|
|
);
|