-- +goose Up
-- +goose StatementBegin

-- =========================================
-- Разделение full_name на first_name и last_name
-- =========================================

-- Добавляем новые колонки
ALTER TABLE users
    ADD COLUMN first_name VARCHAR(100),
    ADD COLUMN last_name VARCHAR(100);

-- Копируем данные из full_name в новые поля
-- Разделяем по первому пробелу
UPDATE users
SET
    first_name = CASE
        WHEN position(' ' in full_name) > 0
        THEN split_part(full_name, ' ', 1)
        ELSE full_name
    END,
    last_name = CASE
        WHEN position(' ' in full_name) > 0
        THEN substring(full_name from position(' ' in full_name) + 1)
        ELSE ''
    END
WHERE full_name IS NOT NULL;

-- Делаем новые поля обязательными
ALTER TABLE users
    ALTER COLUMN first_name SET NOT NULL,
    ALTER COLUMN last_name SET NOT NULL;

-- Удаляем старую колонку
ALTER TABLE users DROP COLUMN full_name;

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin

-- Восстанавливаем full_name
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);

-- Объединяем имя и фамилию обратно
UPDATE users
SET full_name = first_name || ' ' || last_name
WHERE first_name IS NOT NULL AND last_name IS NOT NULL;

-- Делаем full_name обязательным
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;

-- Удаляем новые колонки
ALTER TABLE users
    DROP COLUMN first_name,
    DROP COLUMN last_name;

-- +goose StatementEnd
