| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- -- Align SQL migrations with current GORM persistence models.
- -- This file is designed to be safe on both fresh installs and existing databases.
- -- users: add fields added after initial migration
- ALTER TABLE users ADD COLUMN IF NOT EXISTS username VARCHAR(100) NOT NULL DEFAULT '';
- ALTER TABLE users ADD COLUMN IF NOT EXISTS wechat VARCHAR(100) NOT NULL DEFAULT '';
- ALTER TABLE users ADD COLUMN IF NOT EXISTS notes TEXT NOT NULL DEFAULT '';
- -- api_keys: allow longer keys (GORM model uses size:128)
- ALTER TABLE api_keys ALTER COLUMN key TYPE VARCHAR(128);
- -- accounts: scheduling and rate-limit fields used by repository queries
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS schedulable BOOLEAN NOT NULL DEFAULT TRUE;
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS rate_limited_at TIMESTAMPTZ;
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS rate_limit_reset_at TIMESTAMPTZ;
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS overload_until TIMESTAMPTZ;
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS session_window_start TIMESTAMPTZ;
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS session_window_end TIMESTAMPTZ;
- ALTER TABLE accounts ADD COLUMN IF NOT EXISTS session_window_status VARCHAR(20);
- CREATE INDEX IF NOT EXISTS idx_accounts_schedulable ON accounts(schedulable);
- CREATE INDEX IF NOT EXISTS idx_accounts_rate_limited_at ON accounts(rate_limited_at);
- CREATE INDEX IF NOT EXISTS idx_accounts_rate_limit_reset_at ON accounts(rate_limit_reset_at);
- CREATE INDEX IF NOT EXISTS idx_accounts_overload_until ON accounts(overload_until);
- -- redeem_codes: subscription redeem fields
- ALTER TABLE redeem_codes ADD COLUMN IF NOT EXISTS group_id BIGINT REFERENCES groups(id) ON DELETE SET NULL;
- ALTER TABLE redeem_codes ADD COLUMN IF NOT EXISTS validity_days INT NOT NULL DEFAULT 30;
- CREATE INDEX IF NOT EXISTS idx_redeem_codes_group_id ON redeem_codes(group_id);
- -- usage_logs: billing type used by filters and stats
- ALTER TABLE usage_logs ADD COLUMN IF NOT EXISTS billing_type SMALLINT NOT NULL DEFAULT 0;
- CREATE INDEX IF NOT EXISTS idx_usage_logs_billing_type ON usage_logs(billing_type);
- -- settings: key-value store
- CREATE TABLE IF NOT EXISTS settings (
- id BIGSERIAL PRIMARY KEY,
- key VARCHAR(100) NOT NULL UNIQUE,
- value TEXT NOT NULL,
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
- );
|