refined-backend / schema.sql
Kode-Animator's picture
feat(market): Add D1 client and migration script
f973311
Raw
History Blame Contribute Delete
1.66 kB
-- refined-backend/schema.sql
-- The Market Vault: Persistent Storage for ReFinEd Market Data
-- Pattern: Follows federation-vault / thought-vault D1 conventions
-- Daily candle data (OHLCV) — the core persistent store
CREATE TABLE IF NOT EXISTS candles (
ticker TEXT NOT NULL,
date TEXT NOT NULL, -- YYYY-MM-DD
ts INTEGER NOT NULL, -- Unix timestamp
open REAL,
high REAL NOT NULL,
low REAL NOT NULL,
close REAL NOT NULL,
volume INTEGER,
source TEXT DEFAULT 'finnhub', -- finnhub, yfinance, simulation
ingested_at DATETIME DEFAULT CURRENT_TIMESTAMP,
batch_id TEXT, -- 'migration_v1' for initial seed, NULL for live
PRIMARY KEY (ticker, date)
);
-- Metadata about each ticker's cache state
CREATE TABLE IF NOT EXISTS ticker_meta (
ticker TEXT PRIMARY KEY,
last_updated INTEGER NOT NULL, -- Unix timestamp of last fetch
resolution TEXT DEFAULT 'D',
candle_count INTEGER DEFAULT 0,
earliest_date TEXT,
latest_date TEXT
);
-- User interest signal tracking (aggregate, non-PII)
CREATE TABLE IF NOT EXISTS interest_signals (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ticker TEXT NOT NULL,
action TEXT NOT NULL, -- 'quote', 'history', 'search', 'browse'
recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Indexes for query performance
CREATE INDEX IF NOT EXISTS idx_candles_ticker ON candles(ticker);
CREATE INDEX IF NOT EXISTS idx_candles_date ON candles(date);
CREATE INDEX IF NOT EXISTS idx_signals_ticker ON interest_signals(ticker);
CREATE INDEX IF NOT EXISTS idx_signals_action ON interest_signals(action);