| 1 | CREATE TABLE sources ( |
| 2 | id TEXT PRIMARY KEY, |
| 3 | name TEXT NOT NULL, |
| 4 | category TEXT NOT NULL CHECK (category IN ('primary','resale','sports','festival','social')), |
| 5 | enabled BOOLEAN NOT NULL DEFAULT TRUE, |
| 6 | status TEXT NOT NULL DEFAULT 'healthy' |
| 7 | CHECK (status IN ('healthy','degraded','down','disabled')), |
| 8 | poll_interval_s INTEGER NOT NULL DEFAULT 300 CHECK (poll_interval_s BETWEEN 1 AND 86400), |
| 9 | tight_interval_s INTEGER NOT NULL DEFAULT 10 CHECK (tight_interval_s BETWEEN 1 AND 3600), |
| 10 | last_poll_at TIMESTAMPTZ, |
| 11 | last_success_at TIMESTAMPTZ, |
| 12 | last_error TEXT, |
| 13 | consecutive_failures INTEGER NOT NULL DEFAULT 0 CHECK (consecutive_failures >= 0), |
| 14 | created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
| 15 | updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
| 16 | ); |
| 17 | |
| 18 | CREATE TRIGGER sources_set_updated_at |
| 19 | BEFORE UPDATE ON sources |
| 20 | FOR EACH ROW EXECUTE FUNCTION set_updated_at(); |