98 lines
2.9 KiB
Markdown
98 lines
2.9 KiB
Markdown
# Руководство по миграции: Упрощение системы ролей
|
|
|
|
## Изменения
|
|
|
|
Мы удаляем отдельную таблицу `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)
|
|
|