75 lines
2.3 KiB
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);
|