-- Migration: Add position field to tasks table for subtasks ordering -- Date: 2026-02-02 -- -- This migration adds position field to tasks table to allow -- custom ordering of subtasks. The field is NULL for regular tasks -- and contains position number for subtasks (tasks with parent_task_id). -- Добавляем поле position ALTER TABLE tasks ADD COLUMN position INTEGER; -- Заполняем позиции для всех существующих подзадач -- Позиции присваиваются по порядку id в рамках каждой родительской задачи DO $$ DECLARE parent_record RECORD; subtask_record RECORD; pos INTEGER; BEGIN -- Для каждой родительской задачи FOR parent_record IN SELECT DISTINCT parent_task_id FROM tasks WHERE parent_task_id IS NOT NULL ORDER BY parent_task_id LOOP pos := 0; -- Обновляем подзадачи этой родительской задачи FOR subtask_record IN SELECT id FROM tasks WHERE parent_task_id = parent_record.parent_task_id AND deleted = FALSE ORDER BY id LOOP UPDATE tasks SET position = pos WHERE id = subtask_record.id; pos := pos + 1; END LOOP; END LOOP; END $$; -- Создаем индекс для быстрой сортировки подзадач CREATE INDEX idx_tasks_parent_position ON tasks(parent_task_id, position) WHERE parent_task_id IS NOT NULL AND deleted = FALSE; COMMENT ON COLUMN tasks.position IS 'Position of subtask within parent task. NULL for regular tasks.';