- Sponsors table, LNbits createInvoice, webhook handler - Sponsor routes: create, homepage, list, my-ads, click, extend, check-payment - Admin routes for sponsor management - Frontend: SponsorForm, SponsorTimeSlider, SponsorCard, SponsorsSection - Sponsors page, My Ads page, homepage sponsor block - Header login dropdown with My Ads, Create Sponsor - Transactions integration for sponsor payments - View/click tracking - OG meta fetch for sponsor images - Sponsor modal spacing, invoice polling fallback - Remove Lightning address and Category fields from sponsor form Made-with: Cursor
98 lines
3.1 KiB
SQL
98 lines
3.1 KiB
SQL
-- SQLite schema
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
pubkey TEXT PRIMARY KEY,
|
|
nostr_first_seen_at INTEGER,
|
|
notes_count INTEGER DEFAULT 0,
|
|
followers_count INTEGER DEFAULT 0,
|
|
following_count INTEGER DEFAULT 0,
|
|
activity_score INTEGER DEFAULT 0,
|
|
last_metadata_fetch_at INTEGER,
|
|
lightning_address TEXT,
|
|
name TEXT,
|
|
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS claims (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
pubkey TEXT NOT NULL,
|
|
claimed_at INTEGER NOT NULL,
|
|
payout_sats INTEGER NOT NULL,
|
|
ip_hash TEXT NOT NULL,
|
|
payout_destination_hash TEXT,
|
|
status TEXT NOT NULL CHECK(status IN ('pending','paid','failed')),
|
|
lnbits_payment_hash TEXT,
|
|
error_message TEXT,
|
|
FOREIGN KEY (pubkey) REFERENCES users(pubkey)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ip_limits (
|
|
ip_hash TEXT PRIMARY KEY,
|
|
last_claimed_at INTEGER NOT NULL,
|
|
claim_count_period INTEGER NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS quotes (
|
|
quote_id TEXT PRIMARY KEY,
|
|
pubkey TEXT NOT NULL,
|
|
payout_sats INTEGER NOT NULL,
|
|
lightning_address TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
expires_at INTEGER NOT NULL,
|
|
status TEXT NOT NULL CHECK(status IN ('active','consumed','expired'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS daily_stats (
|
|
date TEXT PRIMARY KEY,
|
|
total_paid_sats INTEGER NOT NULL DEFAULT 0,
|
|
total_claims INTEGER NOT NULL DEFAULT 0,
|
|
unique_pubkeys INTEGER NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS nonces (
|
|
nonce TEXT PRIMARY KEY,
|
|
expires_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS deposits (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
created_at INTEGER NOT NULL,
|
|
amount_sats INTEGER NOT NULL,
|
|
source TEXT NOT NULL CHECK(source IN ('lightning','cashu')),
|
|
lnbits_payment_hash TEXT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_claims_pubkey ON claims(pubkey);
|
|
CREATE INDEX IF NOT EXISTS idx_claims_claimed_at ON claims(claimed_at);
|
|
CREATE INDEX IF NOT EXISTS idx_claims_ip_hash ON claims(ip_hash);
|
|
CREATE INDEX IF NOT EXISTS idx_quotes_expires_at ON quotes(expires_at);
|
|
CREATE INDEX IF NOT EXISTS idx_quotes_status ON quotes(status);
|
|
CREATE INDEX IF NOT EXISTS idx_deposits_created_at ON deposits(created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_deposits_lnbits_payment_hash ON deposits(lnbits_payment_hash);
|
|
|
|
CREATE TABLE IF NOT EXISTS sponsors (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
npub TEXT NOT NULL,
|
|
title TEXT NOT NULL,
|
|
description TEXT NOT NULL,
|
|
image_url TEXT,
|
|
link_url TEXT NOT NULL,
|
|
category TEXT,
|
|
lightning_address TEXT,
|
|
invoice_id TEXT,
|
|
payment_hash TEXT,
|
|
price_sats INTEGER NOT NULL,
|
|
duration_days INTEGER NOT NULL,
|
|
status TEXT NOT NULL CHECK(status IN ('pending_payment','pending_review','active','expired','removed')),
|
|
created_at INTEGER NOT NULL,
|
|
activated_at INTEGER,
|
|
expires_at INTEGER,
|
|
views INTEGER DEFAULT 0,
|
|
clicks INTEGER DEFAULT 0,
|
|
extends_sponsor_id INTEGER
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_sponsors_status ON sponsors(status);
|
|
CREATE INDEX IF NOT EXISTS idx_sponsors_npub ON sponsors(npub);
|
|
CREATE INDEX IF NOT EXISTS idx_sponsors_expires_at ON sponsors(expires_at);
|
|
CREATE INDEX IF NOT EXISTS idx_sponsors_payment_hash ON sponsors(payment_hash);
|