Files
play-life/play-life-backend/migrations/000012_add_subtask_position.up.sql
poignatov a60bfe97dc
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m34s
4.19.0: Добавлены позиции подзадач
2026-02-04 21:21:07 +03:00

50 lines
1.7 KiB
SQL

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