BUG-021 — Декомпозиция
Код
Проблема 1: employee_count в списке ролей
User Service
- Проверить
RoleService.list()— считает ли employee_count через JOIN/subquery изemployee_roles - Проверить
RoleListItemDTO — есть ли полеemployee_count/employees_count - Если поле не заполняется — добавить COUNT query
Admin Web
-
pages/roles/ListPage.tsx— проверить имя поля в колонке (можетemployee_countvsemployees_count) -
shared/types/role.ts—RoleListItem.employees_countилиemployee_count?
Проблема 2: роли и ТТ в списке сотрудников
User Service
- Проверить
EmployeeService.list()— возвращает лиEmployeeListItem.roles[] - Если нет — добавить обогащение: для каждого employee в списке JOIN
employee_roles+roles.name+employee_role_stores→ store names - Performance: для списка из N сотрудников делать N запросов store-names = N+1 problem. Решение: batch-запрос store names по всем уникальным store_ids списка
Admin Web
-
pages/employees/ListPage.tsx:- Колонка «Permissions-роли» — читать
roles[].name(чипы) - Колонка «Торговые точки» — агрегировать
roles[].stores[].name(уникальные) - После BUG-020 бэк отдаёт
stores[{id, name}]вместоstore_ids[uuid]— фронт нужно переключить
- Колонка «Permissions-роли» — читать
-
shared/types/employee.ts—EmployeeListItemдолжен иметьroles: EmployeeRoleRef[]
Связь с BUG-020
BUG-020 (UUID вместо названий) фиксит карточку просмотра GET /employees/{id}. Этот баг — про список GET /employees (EmployeeListItem) и список ролей GET /roles (RoleListItem). Отдельные endpoint’ы, но похожая проблема.
Спеки
Спеки Сотрудники — Список и Роли — Список корректно описывают колонки. Баг в имплементации, не в спеках.