POST /api/collections/generate-id — Сгенерировать ID коллекции
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | POST /api/collections/generate-id |
| Auth | requireAuth — только авторизованный |
| Scope токена | read_write |
| PG-функции | — |
| Таблицы | — |
| SRM | SRM-223 |
| RP (права) | RP-103 |
| Файл роута | server/routes/collections.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
| Аргумент | Где | Обяз. | Заметка |
|---|---|---|---|
name | body | подтвердить | |
type | body | подтвердить |
Коды ответов/ошибок (из хендлера): 400, 401, 403 (+ 200) — уточнить причины вручную
Для человека
Как открыть: орг-админ → раздел «Коллекции» → карточка коллекции → редактор; при добавлении слоя, блока или специальности рядом с полем ID есть кнопка «Сгенерировать» — она и вызывает этот метод.
Превращает человеческое название («Бизнес-аналитик», «РЕАЛИЗАЦИЯ») в системный ID в латинице: короткий слаг из 2–4 слов. Для блоков и специальностей — snake_case (business_analyst), для слоёв — UPPER_SNAKE_CASE (IMPLEMENTATION). ID придумывает LLM, поэтому из любого языка получается осмысленная транслитерация, а не побуквенная.
Это лишь подсказка для поля: значение можно отредактировать вручную перед сохранением. Помните, что ID — системный ключ (на него ссылаются блоки, рёбра, специальности), а название — отображаемая надпись; менять их нужно осознанно.
Название обязательно — без него вернётся ошибка 400. Если LLM недоступна, метод не падает, а отдаёт простой слаг из самого названия.
Кто может. Только администратор: орг-админ (для коллекций своей организации) или администратор платформы. Обычный сотрудник получит 403, неавторизованный — 401.
Для агента
Запись — нужен токен со scope read_write (см. Конвенции). Это административная утилита: вызов разрешён только если владелец токена — администратор платформы или org-admin (role = 'admin' хотя бы в одной организации). Иначе — 403, без сессии — 401. Метод дёргает LLM (отсюда требование прав — чтобы залогиненный не мог дёргать его бесконечно), но в БД ничего не пишет.
Тело запроса (JSON):
| Поле | Тип | Обяз. | Назначение |
|---|---|---|---|
name | string | да | Человеческое название, которое нужно транслитерировать. Пустое → 400 |
type | string | нет | specialty | block | layer. Для layer результат в UPPER_SNAKE_CASE, иначе — snake_case |
Пример запроса:
curl -X POST https://specbuilder.vnimanie.ai/api/collections/generate-id \ -H "Authorization: Bearer tak_..." \ -H "Content-Type: application/json" \ -d '{"name":"Бизнес-аналитик","type":"specialty"}'Ответ 200:
{ "id": "business_analyst" }Это обычный JSON-ответ, не ресурс: контент-негоциация (Accept: text/markdown, ETag/304) к нему не применяется. ID — лишь предложение; чтобы он закрепился, передайте его в id при создании блока/слоя/специальности (POST /api/collections/{id}/blocks и т.п.). При недоступности LLM метод не возвращает ошибку, а отдаёт fallback-слаг, собранный из самого name.