33 lines
1.6 KiB
SQL
33 lines
1.6 KiB
SQL
SET search_path TO atlas, public;
|
|
|
|
-- 单张 AI 编辑保存素材 ID 和编辑参数;供应商任务 ID 只在工作空间内可见。
|
|
CREATE TABLE media_ai_edits (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE RESTRICT,
|
|
source_asset_id UUID NOT NULL,
|
|
reference_asset_ids UUID[] NOT NULL DEFAULT '{}',
|
|
settings JSONB NOT NULL,
|
|
provider_task_id TEXT,
|
|
output_asset_id UUID,
|
|
status TEXT NOT NULL DEFAULT 'queued'
|
|
CHECK (status IN ('queued', 'running', 'succeeded', 'failed', 'cancelled')),
|
|
error_code TEXT,
|
|
created_by_user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
started_at TIMESTAMPTZ,
|
|
completed_at TIMESTAMPTZ,
|
|
FOREIGN KEY (workspace_id, source_asset_id) REFERENCES media_assets(workspace_id, id) ON DELETE RESTRICT,
|
|
FOREIGN KEY (workspace_id, output_asset_id) REFERENCES media_assets(workspace_id, id) ON DELETE RESTRICT,
|
|
UNIQUE (workspace_id, id),
|
|
CHECK (cardinality(reference_asset_ids) <= 2),
|
|
CHECK ((status = 'succeeded') = (output_asset_id IS NOT NULL)),
|
|
CHECK (status <> 'failed' OR error_code IS NOT NULL)
|
|
);
|
|
CREATE INDEX ix_media_ai_edits_source ON media_ai_edits (workspace_id, source_asset_id, created_at DESC);
|
|
|
|
ALTER TABLE media_ai_edits ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE media_ai_edits FORCE ROW LEVEL SECURITY;
|
|
CREATE POLICY workspace_isolation ON media_ai_edits
|
|
USING (workspace_id = app_current_workspace_id())
|
|
WITH CHECK (workspace_id = app_current_workspace_id());
|