Files
LWLT-AIBOT/control-plane/migrations/011_task_artifacts.sql
2026-08-25 10:33:29 +08:00

25 lines
1.1 KiB
SQL

CREATE TABLE IF NOT EXISTS task_artifacts (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id uuid NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
task_id uuid NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
execution_id uuid NOT NULL REFERENCES task_attempts(id) ON DELETE CASCADE,
artifact_index integer NOT NULL CHECK (artifact_index >= 0),
artifact_type text NOT NULL,
file_name text NOT NULL,
content_type text NOT NULL,
byte_size bigint NOT NULL CHECK (byte_size > 0),
sha256 text NOT NULL CHECK (sha256 ~ '^[a-f0-9]{64}$'),
storage_backend text NOT NULL DEFAULT 'database' CHECK (storage_backend IN ('database', 'oss')),
storage_key text,
content_ciphertext text,
created_at timestamptz NOT NULL DEFAULT now(),
UNIQUE (task_id, execution_id, artifact_index),
CHECK (
(storage_backend = 'database' AND content_ciphertext IS NOT NULL AND storage_key IS NULL)
OR (storage_backend = 'oss' AND storage_key IS NOT NULL AND content_ciphertext IS NULL)
)
);
CREATE INDEX IF NOT EXISTS task_artifacts_org_task_idx
ON task_artifacts (organization_id, task_id, created_at DESC);