# Руководство по миграции: Упрощение системы ролей ## Изменения Мы удаляем отдельную таблицу `roles` и переносим роли прямо в таблицу `users`. ### Изменения в схеме: 1. **Таблица `users`**: - Переименование колонки `role_name` → `role` - Удаление внешнего ключа на таблицу `roles` - Добавление значения по умолчанию `'manager'` 2. **Таблица `roles`**: - Удаление всей таблицы (больше не нужна) ## Шаги миграции ### 1. Создать миграцию через Drizzle Kit ```bash cd server bun run db:generate ``` ### 2. Применить миграцию ```bash bun run db:migrate ``` ### 3. Ручные SQL-команды (если нужно) Если автоматическая миграция не сработает, выполните следующие команды вручную: ```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; ``` ## Откат миграции (если нужно) Если что-то пошло не так, можно откатить изменения: ```sql -- 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` возвращает корректный формат: ```json { "user": { "id": "...", "email": "...", "fullName": "...", "role": "manager", "createdAt": "..." } } ``` 3. Регистрация и логин работают корректно 4. Проверка прав доступа работает (middleware)