-- services/mam-api/src/db/schema_patch_editor.sql -- Run once against the Wild Dragon PostgreSQL database. -- Named timelines within a project (multiple per project, like Premiere) CREATE TABLE IF NOT EXISTS sequences ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), project_id UUID NOT NULL REFERENCES projects ON DELETE CASCADE, name TEXT NOT NULL DEFAULT 'Sequence 1', frame_rate NUMERIC(6,3) NOT NULL DEFAULT 59.94, width INTEGER NOT NULL DEFAULT 1920, height INTEGER NOT NULL DEFAULT 1080, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_sequences_project_id ON sequences(project_id); CREATE INDEX IF NOT EXISTS idx_sequences_updated_at ON sequences(updated_at DESC); -- Clips placed on a sequence timeline CREATE TABLE IF NOT EXISTS sequence_clips ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), sequence_id UUID NOT NULL REFERENCES sequences ON DELETE CASCADE, asset_id UUID NOT NULL REFERENCES assets ON DELETE CASCADE, track INTEGER NOT NULL DEFAULT 0, -- track encoding: 0=V1, 1=V2, 100=A1, 101=A2 timeline_in_frames BIGINT NOT NULL, timeline_out_frames BIGINT NOT NULL, source_in_frames BIGINT NOT NULL DEFAULT 0, source_out_frames BIGINT NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_sequence_clips_sequence_id ON sequence_clips(sequence_id); CREATE INDEX IF NOT EXISTS idx_sequence_clips_track_position ON sequence_clips(sequence_id, track, timeline_in_frames);