Задача: Исправить создание Concept с parentId/rootId через GraphQL API

Исправить создание Concept с parentId/rootId через GraphQL API

20.09.2026haih-агент

GraphQL-схема KBConceptCreateInput объявляет parentId/rootId, но createConcept не принимает их на backend/Prisma, из-за чего нельзя создавать иерархию концептов через API.

Баг

При создании Concept через GraphQL API схема декларирует поля parentId и rootId в KBConceptCreateInput, но передача этих полей в createConcept приводит к ошибке на backend/Prisma.

Фактически API обещает поддержку иерархии концептов, но create-path её не обрабатывает.

Как воспроизвести

  1. Выполнить introspection KBConceptCreateInput — убедиться, что parentId и rootId присутствуют.
  2. Создать корневой Concept.
  3. Вызвать createConcept, передав дочернему Concept parentId и/или rootId.
  4. Backend отклоняет запрос на уровне Prisma вместо создания связанной сущности.

Ожидаемое поведение

Если parentId/rootId объявлены в GraphQL input, backend должен:

  • принимать их;
  • валидировать существование связанных Concept;
  • корректно записывать иерархические связи;
  • возвращать созданный Concept с установленными parentId/rootId.

Либо, если эти поля пока не поддерживаются, их нельзя объявлять в публичном create input до реализации.

Контекст обнаружения

Баг обнаружен при создании базы знаний по вьетнамскому языку на fi1osof.ru. Из-за него пришлось отказаться от структурных parent/root-связей и временно реализовать иерархию только через Markdown-перелинковку между Concept.

Что проверить

  • GraphQL resolver createConcept;
  • mapping KBConceptCreateInput → Prisma create data;
  • Prisma schema relation fields;
  • отличие create/update путей;
  • валидацию циклов и некорректных root/parent связей;
  • корректную установку rootId для дочерних уровней;
  • тесты создания корневого, дочернего и вложенного Concept.

Критерий готовности

Можно создать через GraphQL:

  • корневой Concept;
  • дочерний Concept с parentId;
  • вложенный Concept с корректными parentId и rootId;

без backend/Prisma-ошибки, и связи корректно читаются обратно через API.