4.19.0: Добавлены позиции подзадач
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m34s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m34s
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
-- 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.';
|
||||
Reference in New Issue
Block a user