-- Отложенная смена статуса задачи (автоматизации, ctx.tasks.scheduleStatusChange). -- Воркер каждые 5 секунд подбирает просроченные строки и переводит задачу -- в target_status_id, только если она всё ещё в expected_status_id -- (ручной переход в другой статус отменяет отложенное действие). CREATE TABLE IF NOT EXISTS delayed_status_changes ( id SERIAL PRIMARY KEY, organization_id INTEGER NOT NULL REFERENCES organizations(id) ON DELETE CASCADE, task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, form_id INTEGER NOT NULL, expected_status_id INTEGER NOT NULL, target_status_id INTEGER NOT NULL, run_at TIMESTAMPTZ NOT NULL, executed_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS delayed_status_changes_run_at_idx ON delayed_status_changes (run_at) WHERE executed_at IS NULL;