User Service — BR 1.4.2
Контракты: API, Data Model
Миграция БД (Liquibase)
- Changeset:
UPDATE employees SET role = 'admin_franchise' WHERE role = 'franchise' - Changeset:
UPDATE employees SET role = 'admin_franchisee' WHERE role = 'franchisee' - Обновить CHECK constraint на
employees.role(если существует): допустимые значения —admin_franchise,admin_franchisee,manager,cashier. Если констрейнт — ENUM/varchar — изменить соответственно. - Аналогично — поле
roleвsalary_formulas(переименовать старые значения)
Создание сотрудника — валидация (POST /employees)
- В
CreateEmployeeRequest— разрешены толькоmanagerиcashier - Новый error code:
ADMIN_ROLE_FORBIDDEN(HTTP 400) — “Admin roles cannot be created through this endpoint” - Попытка передать
admin_franchise/admin_franchisee→400 ADMIN_ROLE_FORBIDDEN
Создание ЮЛ Франчайзи с владельцем (POST /legal-entities)
- Расширить
CreateLegalEntityRequest: добавить nested блокowner { first_name, last_name, email, phone?, password? } - Убрать приём
owner_user_idв request body (теперь заполняется системой) - При
type=franchiseeблокownerобязателен; если отсутствует или неполный →400 OWNER_FIELDS_REQUIRED - При
type=franchise— блокownerигнорируется (если передан) - Генерация временного пароля, если
owner.passwordне указан (криптостойкий, 8–10 символов) - Транзакция: создать
legal_entities→ создатьemployees(role=admin_franchisee) → обновитьlegal_entities.owner_user_id - Проверка уникальности
owner.emailв рамкахfranchise_idдо вставки →409 OWNER_EMAIL_DUPLICATE - В response 201 добавить блок
owner { id, email, temporary_password }:temporary_passwordвозвращается только если пароль был сгенерирован системой- Для
type=franchise—owner: null
Soft delete / reactivate ЮЛ (BR 1.4.2)
- При soft-delete ЮЛ Франчайзи — деактивировать владельца (
employees.status = 'inactive') - При восстановлении ЮЛ — реактивировать владельца (
status = 'active')
Строковые замены role-checks в коде
- Grep по репозиторию:
"franchise","franchisee"в контексте сравнения роли - Заменить на
"admin_franchise"/"admin_franchisee" - Обновить enum
EmployeeRole(Java) - Обновить метод
getRoleLevel/ иерархию ролей (если есть) - Обновить
@PreAuthorize/ role guard’ы - Обновить логи и сообщения ошибок
Тесты
- Unit-тесты валидации
CreateEmployeeRequest(admin_* отвергается) - Integration-тест:
POST /legal-entities(type=franchisee) создаёт ЮЛ + employee + связывает (1 transaction) - Integration-тест: откат транзакции при ошибке в любом шаге
- Integration-тест:
owner.password=null— возвращаетсяtemporary_password - Integration-тест:
owner.password="custom123"—temporary_password=null - Тест уникальности
owner.email→OWNER_EMAIL_DUPLICATE
Связанные изменения
- Auth Service: Auth Service — JWT с новыми значениями role