Files
0pt/sql/018_document_upload_attempts.sql
T

24 lines
1.5 KiB
SQL

-- Internal coordination only: raw bytes remain in the document storage service.
CREATE TABLE opt_document_upload_attempts (
tenant_id text NOT NULL CHECK (length(tenant_id) BETWEEN 1 AND 256),
project_id text NOT NULL CHECK (length(project_id) BETWEEN 1 AND 256),
actor_id text NOT NULL CHECK (length(actor_id) BETWEEN 1 AND 256),
attempt_id text NOT NULL CHECK (length(attempt_id) BETWEEN 1 AND 256),
source_sha256 text NOT NULL CHECK (source_sha256 ~ '^[0-9a-f]{64}$'),
source_size_bytes bigint NOT NULL CHECK (source_size_bytes > 0 AND source_size_bytes <= 9007199254740991),
request_fingerprint text NOT NULL CHECK (request_fingerprint ~ '^[0-9a-f]{64}$'),
state text NOT NULL CHECK (state IN ('prepared', 'dispatch_started')),
created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
PRIMARY KEY (tenant_id, attempt_id)
);
ALTER TABLE opt_document_upload_attempts ENABLE ROW LEVEL SECURITY;
ALTER TABLE opt_document_upload_attempts FORCE ROW LEVEL SECURITY;
CREATE POLICY opt_document_upload_attempt_scope ON opt_document_upload_attempts
USING (tenant_id = current_setting('app.opt_tenant_id', true)
AND project_id = current_setting('app.opt_project_id', true)
AND actor_id = current_setting('app.opt_actor_id', true))
WITH CHECK (tenant_id = current_setting('app.opt_tenant_id', true)
AND project_id = current_setting('app.opt_project_id', true)
AND actor_id = current_setting('app.opt_actor_id', true));