Files
query-orchestration/internal/database/migrations/00000000000006_documents.up.sql
T
Jay Brown 35d72fccbe Merged in feature/remove-mocks (pull request #202)
Feature/remove mocks

* remove mocks

* cleanup db migrations
2026-01-15 20:39:32 +00:00

126 lines
3.9 KiB
SQL

-- Migration 006: Documents (Consolidated)
-- Document storage and processing tables
-- Merges: 005_documents + 103 + 105 + 106 + 107 + 108 + 111 + 116 + 118
-- NOTE: documentTextExtractions and documentTextExtractionEntries removed (no longer used)
-- Enum for document clean failure types
CREATE TYPE cleanFailType AS ENUM (
'invalid_mimetype',
'invalid_read',
'invalid_read_pages',
'zero_page_count',
'large_file',
'small_dimensions',
'large_dimensions',
'small_dpi',
'large_dpi'
);
-- Enum for clean document mime types
CREATE TYPE cleanMimeType AS ENUM ('application/pdf');
-- Main documents table with all columns
CREATE TABLE documents (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
clientId varchar(255) NOT NULL,
hash text NOT NULL,
-- Batch reference (from migration 103)
batch_id uuid,
-- Filename (from migration 105)
filename TEXT,
-- Folder organization (from migration 111)
folderId uuid,
originalPath text,
-- File size (from migration 118)
file_size_bytes BIGINT,
FOREIGN KEY (clientId) REFERENCES clients(clientId),
FOREIGN KEY (batch_id) REFERENCES batch_uploads(id),
FOREIGN KEY (folderId) REFERENCES folders(id),
UNIQUE(clientId, hash)
);
-- Indexes for documents table
CREATE INDEX idx_documents_batch_id ON documents(batch_id);
CREATE INDEX idx_documents_filename ON documents(filename);
CREATE INDEX idx_documents_folderid ON documents(folderId);
-- Comments for immutable fields (from migration 111)
COMMENT ON COLUMN documents.originalPath IS
'Original path provided during upload. IMMUTABLE after creation - never modify this value.';
-- Document uploads table (staging area for incoming documents)
CREATE TABLE documentUploads (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
bucket text NOT NULL,
key text NOT NULL,
clientId varchar(255) NOT NULL,
part unsignedsmallint NOT NULL,
createdAt timestamp NOT NULL,
-- Filename (from migration 106)
filename TEXT,
-- Batch reference (from migration 107)
batch_id uuid,
-- Folder reference (from migration 116)
folder_id uuid,
FOREIGN KEY (clientId) REFERENCES clients(clientId),
FOREIGN KEY (folder_id) REFERENCES folders(id)
);
-- Indexes for documentUploads
CREATE INDEX idx_documentuploads_filename ON documentUploads(filename);
CREATE INDEX idx_documentuploads_batch_id ON documentUploads(batch_id);
CREATE INDEX idx_documentuploads_clientid ON documentUploads(clientId);
CREATE INDEX idx_documentuploads_folder_id ON documentUploads(folder_id);
-- Document entries (S3 storage records)
CREATE TABLE documentEntries (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
documentId uuid NOT NULL,
bucket text NOT NULL,
key text NOT NULL,
FOREIGN KEY (documentId) REFERENCES documents(id)
);
-- Comments for immutable fields (from migration 111)
COMMENT ON COLUMN documentEntries.key IS
'S3 object key. IMMUTABLE after creation - never modify this value.';
COMMENT ON COLUMN documentEntries.bucket IS
'S3 bucket name. IMMUTABLE after creation - never modify this value.';
-- Document cleans (processed/cleaned documents)
CREATE TABLE documentCleans (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
documentId uuid NOT NULL,
bucket text,
key text,
hash text,
mimetype cleanMimeType,
fail cleanFailType,
FOREIGN KEY (documentId) REFERENCES documents(id),
CONSTRAINT bucket_and_key_together CHECK (
(bucket IS NULL) = (key IS NULL) AND
(bucket IS NULL) = (mimetype IS NULL) AND
(bucket IS NULL) = (hash IS NULL)
),
CONSTRAINT location_xor_fail CHECK (
(bucket IS NOT NULL) != (fail IS NOT NULL)
)
);
-- Document clean entries (version tracking for cleans)
CREATE TABLE documentCleanEntries (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
cleanId uuid NOT NULL,
version bigint NOT NULL,
FOREIGN KEY (cleanId) REFERENCES documentCleans(id)
);