Files
miem_workers/migrations/001_init.sql

75 lines
2.3 KiB
SQL

CREATE TABLE IF NOT EXISTS parser_sources (
id SERIAL PRIMARY KEY,
source_url TEXT NOT NULL UNIQUE,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS crawl_runs (
id SERIAL PRIMARY KEY,
source_url TEXT NOT NULL,
status VARCHAR(32) NOT NULL DEFAULT 'running',
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
finished_at TIMESTAMPTZ,
found_count INTEGER NOT NULL DEFAULT 0,
parsed_count INTEGER NOT NULL DEFAULT 0,
error_count INTEGER NOT NULL DEFAULT 0,
dismissed_count INTEGER NOT NULL DEFAULT 0,
message TEXT
);
CREATE TABLE IF NOT EXISTS employees (
id SERIAL PRIMARY KEY,
profile_key VARCHAR(255) NOT NULL UNIQUE,
profile_type VARCHAR(50),
profile_id VARCHAR(255),
canonical_url TEXT NOT NULL,
full_name TEXT,
status VARCHAR(32) NOT NULL DEFAULT 'active',
first_seen_at TIMESTAMPTZ NOT NULL DEFAULT now(),
last_seen_at TIMESTAMPTZ NOT NULL DEFAULT now(),
dismissed_at TIMESTAMPTZ,
parser_version VARCHAR(32),
current_data JSONB,
current_checksum VARCHAR(64),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS ix_employees_full_name ON employees (full_name);
CREATE INDEX IF NOT EXISTS ix_employees_status ON employees (status);
CREATE TABLE IF NOT EXISTS employee_snapshots (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES employees(id),
crawl_run_id INTEGER REFERENCES crawl_runs(id),
parsed_data JSONB NOT NULL,
html_snapshot BYTEA,
checksum VARCHAR(64) NOT NULL,
parser_version VARCHAR(32),
captured_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS ix_employee_snapshots_employee_id ON employee_snapshots (employee_id);
CREATE TABLE IF NOT EXISTS crawl_errors (
id SERIAL PRIMARY KEY,
crawl_run_id INTEGER NOT NULL REFERENCES crawl_runs(id),
profile_url TEXT,
error_type VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS ix_crawl_errors_run_id ON crawl_errors (crawl_run_id);
CREATE TABLE IF NOT EXISTS profile_tabs (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES employees(id),
title TEXT NOT NULL,
href TEXT NOT NULL,
data_index VARCHAR(64)
);
CREATE INDEX IF NOT EXISTS ix_profile_tabs_employee_id ON profile_tabs (employee_id);