CREATE SCHEMA IF NOT EXISTS media_mirror; CREATE TABLE media_mirror.jobs ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), item_id text NOT NULL, -- itemId из Jellyfin source_url text NOT NULL, -- URL исходника (jellyfin stream) source_type text NOT NULL DEFAULT 'jellyfin', status text NOT NULL DEFAULT 'new', -- new | processing | done | failed | cancelled progress int NOT NULL DEFAULT 0, -- 0..100 video_key text, -- S3-ключ видео (после done) audio_keys jsonb, -- [{key, title, language, index}] error text, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now(), taken_at timestamptz ); CREATE INDEX IF NOT EXISTS idx_jobs_status ON media_mirror.jobs (status, created_at); CREATE UNIQUE INDEX IF NOT EXISTS uq_jobs_active_item ON media_mirror.jobs (item_id) WHERE status NOT IN ('failed', 'cancelled');