BUG-022 — Декомпозиция

Код

User Service

  • RoleService.update() — при обработке salary_formula в PATCH:
    1. salaryFormulaRepository.findByRoleId(roleId) — проверить есть ли уже
    2. Если есть → UPDATE поля (formula_type, hourly_rate, monthly_salary, overtime_rate, norm_hours)
    3. Если нет → INSERT новую
    4. Если request.salary_formula == null → DELETE существующую (если была)
  • Добавить метод SalaryFormulaRepository.findByRoleIdAndEmployeeIdIsNull(roleId) (для role-level формул)
  • Или: DELETE old → INSERT new (как в store schedules fix BUG-019)

Спеки

Баг не выявляет ошибку в спеках — API контракт правильно описывает PATCH как частичное обновление. Проблема в реализации (INSERT instead of UPSERT).