stage4: graph_outbox на AGE (Cypher, fixed password+syntax)

This commit is contained in:
neo committed 2026-09-14 13:59:10 +05:00
1 parent cae85627fe
commit a93aa24b54
4 files changed
+469 -23

No files matched your search

+74
View File
@@ -115,3 +115,77 @@ CREATE TABLE atom_relations (
CREATE INDEX ON atom_relations (atom_id_a, relation_type);
CREATE INDEX ON atom_relations (atom_id_b, relation_type);
CREATE INDEX ON atom_relations (similarity DESC);
-- Медиа-активы (stage 3)
CREATE TABLE assets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
asset_type TEXT NOT NULL, -- image | audio | video | subtitle
format TEXT NOT NULL, -- mp4 | mp3 | wav | jpg | png | srt
uri TEXT, -- путь или URL
title TEXT,
duration_sec NUMERIC,
transcript TEXT,
meta JSONB DEFAULT '{}',
size_bytes BIGINT,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX ON assets (project_id, asset_type);
-- Привязка атомов к медиа (stage 3)
CREATE TABLE atom_assets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
atom_id UUID REFERENCES atoms(id) ON DELETE CASCADE,
asset_id UUID REFERENCES assets(id) ON DELETE CASCADE,
start_time_sec NUMERIC, -- таймкод начала
end_time_sec NUMERIC, -- таймкод конца
role TEXT, -- narration | b-roll | caption
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE (atom_id, asset_id, start_time_sec)
);
CREATE INDEX ON atom_assets (asset_id);
CREATE INDEX ON atom_assets (atom_id);
-- Композиции (stage 3)
CREATE TABLE compositions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
channel TEXT NOT NULL, -- youtube | podcast | newsletter | web | telegram
slug TEXT,
title TEXT,
status TEXT DEFAULT 'draft', -- draft | building | ready | scheduled | published
recipe JSONB NOT NULL, -- правила сборки: типы, темы, порядок
atom_ids UUID[] NOT NULL, -- порядок атомов в композиции
content TEXT,
meta JSONB DEFAULT '{}',
scheduled_at TIMESTAMPTZ,
published_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE (project_id, channel, slug)
);
CREATE INDEX ON compositions (project_id, channel, status);
-- Публикации (stage 3)
CREATE TABLE publications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
composition_id UUID REFERENCES compositions(id) ON DELETE CASCADE,
target TEXT NOT NULL, -- URL, channel_id, video_id, list_id
external_id TEXT,
published_at TIMESTAMPTZ DEFAULT now(),
metrics JSONB DEFAULT '{}' -- views, clicks, conversions, revenue
);
CREATE INDEX ON publications (composition_id);
-- Промпты как данные (stage 3)
CREATE TABLE prompts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slug TEXT NOT NULL,
version TEXT NOT NULL DEFAULT 'v1',
description TEXT,
system_prompt TEXT,
user_prompt TEXT,
params JSONB DEFAULT '{}', -- model, temperature, max_tokens
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE (slug, version)
);