BR 1.4 → User Service
Репозиторий: erp-user-service
Контракты: API, Data Model
Задачи
Инфраструктура
- Liquibase миграция: таблица
employees(id, franchise_id, first_name, last_name, email, password_hash, phone, pin_hash, role, status, is_courier, created_at, updated_at) - Liquibase миграция: таблица
employee_stores(employee_id, store_id) - Liquibase миграция: seed admin employee (email:
admin@erp.local, password:admin123, role: franchise) - Entity
Employee+EmployeeStore(JPA) - Repository
EmployeeRepository
Бизнес-логика
- Password bcrypt (cost 12)
- PIN bcrypt + uniqueness per store validation
- Role-based access: franchise all, franchisee own stores, manager own store view-only
- Franchisee cannot create franchise/franchisee roles (
ROLE_ESCALATION) - Role immutable on update (
ROLE_IMMUTABLE) - Store validation via Store Service client (existing)
Эндпоинты
-
GET /api/v1/employees— список (пагинация, search, фильтры role/store/status, сортировка) -
GET /api/v1/employees/{id}— детали (включая список ТТ) -
POST /api/v1/employees— создание (валидация email/PIN, ролевые ограничения) -
PATCH /api/v1/employees/{id}— обновление (role immutable, password optional) -
POST /api/v1/employees/{id}/deactivate— деактивация (завершение сессий) -
POST /api/v1/employees/{id}/reactivate— реактивация -
POST /internal/users/validate-credentials— валидация email + bcrypt-пароль, возврат данных для JWT -
GET /internal/users/by-email— получение сотрудника по email -
POST /internal/users/validate-pin— валидация PIN для POS-авторизации
Docker
- Update docker-compose.yml
JWT валидируется локально (HS256 + shared secret). Auth Service отложен.