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

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)