More billing work

This commit is contained in:
Jon Staab
2026-03-23 17:44:03 -07:00
parent 1ea087643b
commit 9491d608ae
11 changed files with 1253 additions and 637 deletions
+58 -5
View File
@@ -1,7 +1,11 @@
CREATE TABLE IF NOT EXISTS tenants (
pubkey TEXT PRIMARY KEY,
status TEXT NOT NULL,
tenant_nwc_url TEXT NOT NULL DEFAULT ""
nwc_url TEXT NOT NULL DEFAULT "",
created_at INTEGER NOT NULL DEFAULT (UNIXEPOCH()),
billing_anchor_at INTEGER NOT NULL DEFAULT (UNIXEPOCH()),
stripe_customer_id TEXT NOT NULL DEFAULT '',
stripe_subscription_id TEXT NOT NULL DEFAULT ''
);
CREATE TABLE IF NOT EXISTS relays (
@@ -22,18 +26,67 @@ CREATE TABLE IF NOT EXISTS invoices (
tenant TEXT NOT NULL,
amount INTEGER NOT NULL,
status TEXT NOT NULL,
created_at TEXT NOT NULL,
invoice TEXT NOT NULL,
created_at INTEGER NOT NULL,
bolt11 TEXT NOT NULL,
period_start INTEGER NOT NULL,
period_end INTEGER NOT NULL,
FOREIGN KEY (tenant) REFERENCES tenants(pubkey)
);
CREATE UNIQUE INDEX IF NOT EXISTS invoices_tenant_period_unique
ON invoices (tenant, period_start, period_end);
CREATE TABLE IF NOT EXISTS invoice_items (
id TEXT PRIMARY KEY,
invoice TEXT NOT NULL,
relay TEXT NOT NULL,
amount INTEGER NOT NULL,
period_start TEXT NOT NULL,
period_end TEXT NOT NULL,
period_start INTEGER NOT NULL,
period_end INTEGER NOT NULL,
FOREIGN KEY (invoice) REFERENCES invoices(id),
FOREIGN KEY (relay) REFERENCES relays(id)
);
CREATE TABLE IF NOT EXISTS plans (
id TEXT PRIMARY KEY,
sats_per_month INTEGER NOT NULL
);
INSERT OR IGNORE INTO plans (id, sats_per_month) VALUES
('free', 0),
('basic', 10000),
('growth', 50000);
CREATE TABLE IF NOT EXISTS relay_lifecycle_events (
id TEXT PRIMARY KEY,
relay TEXT NOT NULL,
tenant TEXT NOT NULL,
event_type TEXT NOT NULL,
plan TEXT NOT NULL,
created_at INTEGER NOT NULL,
FOREIGN KEY (relay) REFERENCES relays(id),
FOREIGN KEY (tenant) REFERENCES tenants(pubkey)
);
CREATE INDEX IF NOT EXISTS relay_lifecycle_events_relay_idx
ON relay_lifecycle_events (relay, created_at);
CREATE INDEX IF NOT EXISTS relay_lifecycle_events_tenant_idx
ON relay_lifecycle_events (tenant, created_at);
CREATE TABLE IF NOT EXISTS invoice_attempts (
id TEXT PRIMARY KEY,
invoice TEXT NOT NULL,
run_id TEXT NOT NULL,
method TEXT NOT NULL,
outcome TEXT NOT NULL,
error TEXT NOT NULL DEFAULT '',
created_at INTEGER NOT NULL,
FOREIGN KEY (invoice) REFERENCES invoices(id)
);
CREATE INDEX IF NOT EXISTS invoice_attempts_invoice_idx
ON invoice_attempts (invoice, created_at);
CREATE INDEX IF NOT EXISTS invoice_attempts_run_id_idx
ON invoice_attempts (run_id);