-- 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.';
