-- Phase 4 migration: add ScheduledJob and MediaObject BEGIN; -- ScheduledJob CREATE TABLE IF NOT EXISTS "ScheduledJob" ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), name varchar(255) NOT NULL, payload jsonb, cron varchar(255), run_at timestamptz, status varchar(50) NOT NULL DEFAULT 'pending', attempts integer NOT NULL DEFAULT 0, last_run_at timestamptz, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_scheduledjob_name ON "ScheduledJob" (name); CREATE INDEX IF NOT EXISTS idx_scheduledjob_status ON "ScheduledJob" (status); -- MediaObject CREATE TABLE IF NOT EXISTS "MediaObject" ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), owner_user_id uuid REFERENCES "User"(id) ON DELETE SET NULL, storage_key varchar(1024) NOT NULL, filename varchar(1024), mime_type varchar(255), size bigint, is_public boolean NOT NULL DEFAULT false, metadata jsonb, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_media_owner_user_id ON "MediaObject" (owner_user_id); CREATE INDEX IF NOT EXISTS idx_media_storage_key ON "MediaObject" (storage_key); COMMIT;