CREATE TABLE IF NOT EXISTS billing_plans ( id VARCHAR(32) PRIMARY KEY, name VARCHAR(64) NOT NULL, price_monthly INTEGER NOT NULL DEFAULT 0, price_yearly INTEGER NOT NULL DEFAULT 0, currency VARCHAR(3) NOT NULL DEFAULT 'RUB', features JSONB DEFAULT '[]'::jsonb, limits JSONB DEFAULT '{}'::jsonb ); CREATE TABLE IF NOT EXISTS billing_subscriptions ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, plan_id VARCHAR(32) NOT NULL, status VARCHAR(24) NOT NULL DEFAULT 'active', period VARCHAR(8) NOT NULL DEFAULT 'monthly', started_at TIMESTAMP DEFAULT NOW() NOT NULL, expires_at TIMESTAMP, created_at TIMESTAMP DEFAULT NOW() NOT NULL, updated_at TIMESTAMP DEFAULT NOW() NOT NULL ); CREATE TABLE IF NOT EXISTS billing_payments ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, plan_id VARCHAR(32) NOT NULL, amount INTEGER NOT NULL, currency VARCHAR(3) NOT NULL DEFAULT 'RUB', status VARCHAR(24) NOT NULL DEFAULT 'pending', yookassa_id TEXT, period VARCHAR(8) NOT NULL DEFAULT 'monthly', created_at TIMESTAMP DEFAULT NOW() NOT NULL ); CREATE INDEX IF NOT EXISTS idx_billing_subscriptions_user_id ON billing_subscriptions(user_id); CREATE INDEX IF NOT EXISTS idx_billing_payments_user_id ON billing_payments(user_id);