Initial Commit

This commit is contained in:
2026-01-27 13:24:03 -05:00
commit c85b877dc0
42 changed files with 5689 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
-- Initial database schema
-- Services table
CREATE TABLE IF NOT EXISTS services (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
url VARCHAR(500) NOT NULL,
logo_url VARCHAR(500),
policy_url VARCHAR(500),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Policy versions table
CREATE TABLE IF NOT EXISTS policy_versions (
id SERIAL PRIMARY KEY,
service_id INTEGER REFERENCES services(id) ON DELETE CASCADE,
content TEXT NOT NULL,
content_hash VARCHAR(64) NOT NULL,
fetched_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Analyses table
CREATE TABLE IF NOT EXISTS analyses (
id SERIAL PRIMARY KEY,
service_id INTEGER REFERENCES services(id) ON DELETE CASCADE,
policy_version_id INTEGER REFERENCES policy_versions(id) ON DELETE CASCADE,
overall_score VARCHAR(1) NOT NULL CHECK (overall_score IN ('A', 'B', 'C', 'D', 'E')),
findings JSONB NOT NULL,
raw_analysis TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Admin sessions table
CREATE TABLE IF NOT EXISTS admin_sessions (
id SERIAL PRIMARY KEY,
session_token VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NOT NULL
);
-- Indexes for performance
CREATE INDEX IF NOT EXISTS idx_services_name ON services(name);
CREATE INDEX IF NOT EXISTS idx_analyses_service_id ON analyses(service_id);
CREATE INDEX IF NOT EXISTS idx_analyses_score ON analyses(overall_score);
CREATE INDEX IF NOT EXISTS idx_policy_versions_service_id ON policy_versions(service_id);
CREATE INDEX IF NOT EXISTS idx_admin_sessions_token ON admin_sessions(session_token);
CREATE INDEX IF NOT EXISTS idx_admin_sessions_expires ON admin_sessions(expires_at);