init
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# Руководство по миграции: Упрощение системы ролей
|
||||
|
||||
## Изменения
|
||||
|
||||
Мы удаляем отдельную таблицу `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)
|
||||
|
||||
Reference in New Issue
Block a user