35d72fccbe
Feature/remove mocks * remove mocks * cleanup db migrations
126 lines
3.9 KiB
SQL
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)
|
|
);
|