Рефакторинг тестов: интеграция с задачами
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 57s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 57s
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
-- Migration: Refactor configs to link via tasks.config_id
|
||||
-- This migration adds config_id to tasks table and migrates existing configs to tasks
|
||||
-- After migration: configs only contain words_count, max_cards (name and try_message removed)
|
||||
|
||||
-- ============================================
|
||||
-- Step 1: Add config_id to tasks
|
||||
-- ============================================
|
||||
ALTER TABLE tasks
|
||||
ADD COLUMN IF NOT EXISTS config_id INTEGER REFERENCES configs(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_tasks_config_id ON tasks(config_id);
|
||||
|
||||
-- Unique index: only one task per config
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_tasks_config_id_unique
|
||||
ON tasks(config_id) WHERE config_id IS NOT NULL AND deleted = FALSE;
|
||||
|
||||
COMMENT ON COLUMN tasks.config_id IS 'Link to test config. NULL if task is not a test.';
|
||||
|
||||
-- ============================================
|
||||
-- Step 2: Migrate existing configs to tasks
|
||||
-- Create a task for each config that doesn't have one yet
|
||||
-- ============================================
|
||||
INSERT INTO tasks (user_id, name, reward_message, repetition_period, repetition_date, config_id)
|
||||
SELECT
|
||||
c.user_id,
|
||||
c.name, -- Config name -> Task name
|
||||
c.try_message, -- try_message -> reward_message
|
||||
'0 day'::INTERVAL, -- repetition_period = 0 (infinite task)
|
||||
'0 week', -- repetition_date = 0 (infinite task)
|
||||
c.id -- Link to config
|
||||
FROM configs c
|
||||
WHERE c.name IS NOT NULL -- Only configs with names
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM tasks t WHERE t.config_id = c.id AND t.deleted = FALSE
|
||||
);
|
||||
|
||||
-- ============================================
|
||||
-- Step 3: Remove name and try_message from configs
|
||||
-- These are now stored in the linked task
|
||||
-- ============================================
|
||||
ALTER TABLE configs DROP COLUMN IF EXISTS name;
|
||||
ALTER TABLE configs DROP COLUMN IF EXISTS try_message;
|
||||
|
||||
-- ============================================
|
||||
-- Comments for documentation
|
||||
-- ============================================
|
||||
COMMENT ON TABLE configs IS 'Test configurations (words_count, max_cards, dictionary associations). Linked to tasks via tasks.config_id.';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user