Files
stream.graff.tech-new/server/MIGRATION_GUIDE.md
T
2025-10-03 15:43:22 +05:00

2.9 KiB

Руководство по миграции: Упрощение системы ролей

Изменения

Мы удаляем отдельную таблицу roles и переносим роли прямо в таблицу users.

Изменения в схеме:

  1. Таблица users:

    • Переименование колонки role_namerole
    • Удаление внешнего ключа на таблицу roles
    • Добавление значения по умолчанию 'manager'
  2. Таблица roles:

    • Удаление всей таблицы (больше не нужна)

Шаги миграции

1. Создать миграцию через Drizzle Kit

cd server
bun run db:generate

2. Применить миграцию

bun run db:migrate

3. Ручные SQL-команды (если нужно)

Если автоматическая миграция не сработает, выполните следующие команды вручную:

-- 1. Удалить внешний ключ из таблицы users
ALTER TABLE users DROP CONSTRAINT IF EXISTS users_role_name_roles_name_fk;

-- 2. Переименовать колонку role_name в role
ALTER TABLE users RENAME COLUMN role_name TO role;

-- 3. Добавить значение по умолчанию
ALTER TABLE users ALTER COLUMN role SET DEFAULT 'manager';

-- 4. Удалить таблицу roles
DROP TABLE IF EXISTS roles;

Откат миграции (если нужно)

Если что-то пошло не так, можно откатить изменения:

-- 1. Создать таблицу roles заново
CREATE TABLE roles (
  name TEXT PRIMARY KEY,
  title VARCHAR(100) NOT NULL
);

-- 2. Заполнить таблицу roles
INSERT INTO roles (name, title) VALUES
  ('admin', 'Администратор'),
  ('director', 'Директор'),
  ('manager', 'Менеджер');

-- 3. Переименовать колонку обратно
ALTER TABLE users RENAME COLUMN role TO role_name;

-- 4. Удалить значение по умолчанию
ALTER TABLE users ALTER COLUMN role_name DROP DEFAULT;

-- 5. Добавить внешний ключ
ALTER TABLE users ADD CONSTRAINT users_role_name_roles_name_fk 
  FOREIGN KEY (role_name) REFERENCES roles(name);

Проверка

После миграции проверьте:

  1. Все существующие пользователи сохранили свои роли
  2. API /auth/me возвращает корректный формат:
    {
      "user": {
        "id": "...",
        "email": "...",
        "fullName": "...",
        "role": "manager",
        "createdAt": "..."
      }
    }
    
  3. Регистрация и логин работают корректно
  4. Проверка прав доступа работает (middleware)