Initial Commit
This commit is contained in:
50
migrations/001_initial.sql
Normal file
50
migrations/001_initial.sql
Normal 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);
|
||||
Reference in New Issue
Block a user