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

Код

User Service (backend)

  • EmployeeResponse / EmployeeListItem — поле roles[] должно возвращать:
    "roles": [
      {
        "id": "uuid роли",
        "name": "Кассир",
        "store_ids": [
          { "id": "uuid", "name": "Шаурма Арбат" },
          { "id": "uuid", "name": "Шаурма Тверская" }
        ]
      }
    ]
    Сейчас: role_name пустой, store_ids — плоский массив UUID
  • EmployeeService.buildEmployeeRoleRefs() — при сборке response join’ить roles.name и stores.name (через Store Service internal API или через уже загруженные employee_stores)
  • Либо: обогащать response на уровне Admin BFF (proxy вызывает /stores и резолвит имена)

Admin Web (frontend)

  • ViewPage.tsx — секция «Торговые точки» и «Permissions-роли»: отображать name вместо id
  • ListPage.tsx — колонка «Торговые точки»: если response содержит объекты {id, name} → показывать name
  • EditPage.tsx — секция «Permissions-роли»: при отображении назначенных ролей показывать role.name и store.name

Admin BFF (если обогащение на BFF)

  • Альтернатива: в routes/employees.ts после получения response от User Service — дополнительно запрашивать /stores?ids=... и маппить UUID→name. Минус: +1 запрос. Плюс: не нужно менять User Service.

Рекомендация

Правильнее обогащать на бэкенде (User Service) — у него уже есть доступ к Store Service через internal API (StoreServiceClient). Добавить join на roles.name (из RoleRepository) + stores.name (через StoreServiceClient.getStoreNames(ids)).

Спеки

Баг не выявляет ошибку в спеках — фронт-спека Сотрудники — Карточка корректно описывает что должны отображаться названия ролей и ТТ. Имплементация просто не резолвит UUID в имена.