H-3657: задокументировал user-list-cache (источник usersListKey) #36

Merged
denis merged 4 commits from feature/H-3657 into master 2026-05-28 14:02:48 +00:00
4 Commits
Author SHA1 Message Date
DenisandClaude Opus 4.7 58a32b1768 H-3657: вычитка стиля и корректности данных в MR !36
Привёл описания /user/index, /user/search, /file/prepare-upload,
/file/finish-upload, /user-list-cache/* и связанных схем
(UserListForm, UserListData, File, FilePrepareUploadBody,
FilePrepareUploadResponse) к единому нейтральному документационному
стилю — как в H-3821.

Убраны: разговорные обороты («юзер», «флоу», «грабли», «отдаёте»,
«придумываете», «протух», «дефолт», «компактный»), эмодзи в
заголовках секций, ###-маркеры разделов внутри description.
Все формулировки переведены в третье лицо.

Поправлены данные:
- is_public в FilePrepareUploadBody: integer enum [0,1] → boolean
  (соответствует @property boolean is_public в File model).
- /user/search?limit: убран искусственный maximum: 100, в контроллере
  верхнего предела нет (только default = 10).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 17:00:40 +03:00
DenisandClaude Opus 4.7 37203aee1b H-3657: задокументировал /file/prepare-upload и /file/finish-upload
Без этих эндпоинтов excel-import flow для wallet-транзакций
неполный — интегратор не понимает откуда взять file_id для
POST /admin/wallet-transaction/excel-processing.

- Новый тег `file` (Methods for uploading files via signed-URL...).
- POST /file/prepare-upload: создаёт File-запись + возвращает signedUrl
  для PUT-загрузки бинарника напрямую в S3.
- POST /file/finish-upload?id=<uuid>: помечает файл как UPLOADED, после
  чего file_id можно использовать в downstream-флоу.
- Подробная описание двухшагового флоу (prepare → PUT signedUrl → finish)
  в описании prepare-upload.
- Идемпотентность через повторный prepare-upload с тем же id.
- Схемы File (полная), FilePrepareUploadBody, FilePrepareUploadResponse.
- В WalletExcelFormBody.file_id ссылка на этот upload-флоу — раньше
  было просто «UUID предварительно загруженного xlsx».

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 16:49:54 +03:00
DenisandClaude Opus 4.7 b8d17240ab H-3657: задокументировал /user/index и /user/search
Источник user_id для дальнейшей передачи в user-list-cache.
Раньше в swagger был только /user/profile (один по id) и /user/items
(минимальный список), но не было пагинированного индекса
с фильтрами — а именно через /user/index интегратор собирает
получателей для массового начисления валюты.

- GET /user/index: пагинация (per-page 1..20), сортировка, фильтры
  по основным атрибутам UserSearch (id, email, name, first_name,
  last_name, department_id, reg_status_id, group_id, position, ...),
  expand-поля.
- GET /user/search?q=&limit=&offset=: быстрый компактный поиск
  по ФИО/email/должности. Возвращает {q, users:[{id, name, position,
  departmentName, isBoss, ...}]}. Требует право show-structure-names —
  иначе users:[].

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 16:06:44 +03:00
DenisandClaude Opus 4.7 1032e5b522 H-3657: задокументировал user-list-cache (источник usersListKey)
Без этого интегратор не понимает откуда взять usersListKey для
POST /admin/wallet-transaction/create.

- Тег user-list-cache (Methods for caching ad-hoc employee selections...).
- POST /user-list-cache/set-user-list: тело {key, userList:{usersId,...}}.
  В описании явно прописал что Content-Type обязательно application/json —
  через form-urlencoded вложенный JsonModel не парсится, и сервер
  молча сохраняет пустую выборку (грабли которые я сам и наступил
  во время smoke-теста).
- GET /user-list-cache/user-list-data?key=<key>: возвращает развёрнутую
  выборку (users, departments, userGroups, ...). Схема ответа проверена
  живьём на denis.hrbox.io — все ключи совпадают.
- Схемы UserListForm, UserListCacheSetBody, UserListData.
- В описании POST /admin/wallet-transaction/create добавил секцию
  «Как получить usersListKey» с пошаговым флоу и ссылкой.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 15:51:23 +03:00