KnowledgeMar 7, 2026, 9:15:28 PM

GraphQL API — рабочие шаблоны

⚠️ ЖЁСТКОЕ ПРАВИЛО: Никогда не редактировать и не удалять эту запись. Только по прямому указанию Николая (id: cmkppub1z0002mu0z427kxsay) и только когда оно касается конкретно этого MindLog.


Fragments

fragment KBConceptFragment on KBConcept {
  id
  type
  name
  description
}

fragment KBConceptWithDetailsFragment on KBConcept {
  ...KBConceptFragment
  content
  createdAt
  updatedAt
}

fragment KBFactFragment on KBFact {
  id
  type
  statement
  confidence
  importance
  status
  validFrom
  validTo
  createdAt
}

fragment KBFactProjectionFragment on KBFactProjection {
  id
  factId
  knowledgeSpaceId
  visibility
  trustLevel
  importance
  notes
  createdAt
}

fragment TaskFragment on Task {
  id
  title
  description
  status
  startDatePlaning
  endDatePlaning
  startDate
  endDate
  assigneeId
  parentId
  createdAt
}

fragment TaskWithDetailsFragment on Task {
  ...TaskFragment
  content
  updatedAt
}

fragment MindLogFragment on MindLog {
  id
  type
  data
  quality
  relatedToUserId
  createdAt
  updatedAt
}

fragment TaskWorkLogFragment on TaskWorkLog {
  id
  content
  taskId
  createdAt
}

fragment World3dStatsFragment on World3dStats {
  worldName
  nodeCount
  snapshotCount
}

World3d

query world3dStats {
  response: world3dStats {
    worldName
    nodeCount
    snapshotCount
  }
}
query world3dScene {
  response: world3dScene
}

World3dObject

query world3dObjectsMap(
  $uuid: String = "root"
) {
  response: world3dObjectsMap(
    uuid: $uuid
  )
}

Параметры:

  • uuid: String — UUID объекта Three.js (по умолчанию "root" для корня сцены)
mutation world3dObjectCreate($data: World3dObjectCreateInput!) {
  response: world3dObjectCreate(data: $data)
}

World3dObjectCreateInput:

  • parentId: String (default: "root")
  • object: JSON!
mutation world3dObjectUpdate(
  $where: World3dObjectWhereUniqueInput!
  $data: World3dObjectUpdateInput!
) {
  response: world3dObjectUpdate(where: $where, data: $data)
}

World3dObjectWhereUniqueInput:

  • uuid: String! — UUID объекта Three.js (поле uuid из JSON сцены)

World3dObjectUpdateInput:

  • object: JSON!

При update выполняется partial merge — обновляются только переданные свойства, children сохраняются.

mutation world3dObjectDelete($uuid: String!, $cascade: Boolean = false) {
  response: world3dObjectDelete(uuid: $uuid, cascade: $cascade)
}

KBConcept

query myConcepts(
  $where: KBConceptWhereInput
  $orderBy: KBConceptOrderByInput
  $skip: Int
  $take: Int
  $withDetails: Boolean = false
) {
  response: myConcepts(
    where: $where
    orderBy: $orderBy
    skip: $skip
    take: $take
  ) {
    ...KBConceptFragment
    ... @include(if: $withDetails) {
      content
      createdAt
      updatedAt
    }
  }
}

KBConceptWhereInput:

  • ids: [String!]
  • type: String
  • name: String

KBConceptOrderByInput:

  • createdAt: SortOrder
  • name: SortOrder
  • type: SortOrder
mutation createConcept($data: KBConceptCreateInput!) {
  response: createConcept(data: $data) {
    ...KBConceptFragment
  }
}

KBConceptCreateInput:

  • name: String!
  • type: String!
  • description: String
  • content: String
mutation updateConcept($id: String!, $data: KBConceptUpdateInput!) {
  response: updateConcept(id: $id, data: $data) {
    ...KBConceptWithDetailsFragment
  }
}

KBConceptUpdateInput:

  • name: String
  • type: String
  • description: String
  • content: String
mutation deleteConcept($id: String!) {
  response: deleteConcept(id: $id) {
    id
  }
}

KBFact

query myFacts(
  $where: KBFactWhereInput
  $orderBy: KBFactOrderByInput
  $skip: Int
  $take: Int
) {
  response: myFacts(
    where: $where
    orderBy: $orderBy
    skip: $skip
    take: $take
  ) {
    ...KBFactFragment
  }
}

KBFactWhereInput:

  • type: String
  • status: String
  • confidence: Float
  • importance: Float
  • validFrom: DateTime
  • validTo: DateTime

KBFactOrderByInput:

  • createdAt: SortOrder
  • validFrom: SortOrder
  • confidence: SortOrder
  • importance: SortOrder
mutation createFact($data: KBFactCreateInput!) {
  response: createFact(data: $data) {
    ...KBFactFragment
  }
}

KBFactCreateInput:

  • type: String!
  • statement: String!
  • validFrom: DateTime
  • validTo: DateTime
  • confidence: Float
  • importance: Float
  • source: String
  • status: String
mutation updateFact($id: String!, $data: KBFactUpdateInput!) {
  response: updateFact(id: $id, data: $data) {
    ...KBFactFragment
  }
}

KBFactUpdateInput:

  • type: String
  • statement: String
  • validFrom: DateTime
  • validTo: DateTime
  • confidence: Float
  • importance: Float
  • source: String
  • status: String
mutation deleteFact($id: String!) {
  response: deleteFact(id: $id) {
    id
  }
}

KBFactProjection

query myFactProjections(
  $where: KBFactProjectionWhereInput
  $orderBy: KBFactProjectionOrderByInput
  $skip: Int
  $take: Int
) {
  response: myFactProjections(
    where: $where
    orderBy: $orderBy
    skip: $skip
    take: $take
  ) {
    ...KBFactProjectionFragment
  }
}

KBFactProjectionWhereInput:

  • factId: String
  • knowledgeSpaceId: String
  • visibility: String
  • trustLevel: Float
  • importance: Float

KBFactProjectionOrderByInput:

  • createdAt: SortOrder
  • trustLevel: SortOrder
  • importance: SortOrder
mutation createFactProjection($data: KBFactProjectionCreateInput!) {
  response: createFactProjection(data: $data) {
    ...KBFactProjectionFragment
  }
}

KBFactProjectionCreateInput:

  • factId: String!
  • knowledgeSpaceId: String!
  • visibility: String
  • trustLevel: Float
  • importance: Float
  • notes: String
mutation updateFactProjection(
  $id: String!
  $data: KBFactProjectionUpdateInput!
) {
  response: updateFactProjection(id: $id, data: $data) {
    ...KBFactProjectionFragment
  }
}

KBFactProjectionUpdateInput:

  • visibility: String
  • trustLevel: Float
  • importance: Float
  • notes: String
mutation deleteFactProjection($id: String!) {
  response: deleteFactProjection(id: $id) {
    id
  }
}

Task

query tasks(
  $where: TaskWhereInput
  $orderBy: TaskOrderByInput
  $skip: Int
  $take: Int
  $withDetails: Boolean = false
) {
  response: tasks(where: $where, orderBy: $orderBy, skip: $skip, take: $take) {
    ...TaskFragment
    ... @include(if: $withDetails) {
      content
      updatedAt
    }
  }
}

TaskWhereInput:

  • status: String
  • parentId: String
  • incompletedOnly: Boolean

TaskOrderByInput:

  • createdAt: SortOrder
mutation createTask($data: TaskCreateInput!) {
  response: createTask(data: $data) {
    ...TaskFragment
  }
}

TaskCreateInput:

  • title: String!
  • description: String
  • content: String
  • startDatePlaning: DateTime
  • endDatePlaning: DateTime
  • parentId: String
mutation updateTask($where: TaskWhereUniqueInput!, $data: TaskUpdateInput!) {
  response: updateTask(where: $where, data: $data) {
    ...TaskWithDetailsFragment
  }
}

TaskWhereUniqueInput:

  • id: String!

TaskUpdateInput:

  • title: String
  • description: String
  • content: String
  • status: String
  • startDatePlaning: DateTime
  • endDatePlaning: DateTime
  • startDate: DateTime
  • endDate: DateTime
mutation deleteTask($where: TaskWhereUniqueInput!) {
  response: deleteTask(where: $where) {
    id
  }
}

MindLog

query mindLogs($where: MindLogWhereInput, $skip: Int, $take: Int) {
  response: mindLogs(where: $where, skip: $skip, take: $take) {
    ...MindLogFragment
  }
}

MindLogWhereInput:

  • type: MindLogTypeWhereInput
    • type.equals: String
    • type.in: [String!]
  • relatedToUserId: String
mutation createMindLog($data: MindLogCreateInput!) {
  response: createMindLog(data: $data) {
    ...MindLogFragment
  }
}

MindLogCreateInput:

  • type: String!
  • data: String!
  • quality: Int
  • relatedToUserId: String
mutation updateMindLog(
  $where: MindLogWhereUniqueInput!
  $data: MindLogUpdateInput!
) {
  response: updateMindLog(where: $where, data: $data) {
    ...MindLogFragment
  }
}

MindLogWhereUniqueInput:

  • id: String!

MindLogUpdateInput:

  • data: String
  • quality: Int
mutation deleteMindLog($where: MindLogWhereUniqueInput!) {
  response: deleteMindLog(where: $where) {
    id
  }
}

TaskWorkLog

query taskWorkLogs(
  $where: TaskWorkLogWhereInput
  $skip: Int
  $take: Int
  $orderBy: TaskWorkLogOrderByInput
) {
  response: taskWorkLogs(
    where: $where
    skip: $skip
    take: $take
    orderBy: $orderBy
  ) {
    ...TaskWorkLogFragment
  }
}

TaskWorkLogWhereInput:

  • taskId: String

TaskWorkLogOrderByInput:

  • createdAt: SortOrder
mutation createTaskWorkLog($data: TaskWorkLogCreateInput!) {
  response: createTaskWorkLog(data: $data) {
    ...TaskWorkLogFragment
  }
}

TaskWorkLogCreateInput:

  • taskId: String!
  • content: String!
mutation deleteTaskWorkLog($where: TaskWorkLogWhereUniqueInput!) {
  response: deleteTaskWorkLog(where: $where) {
    id
  }
}

TaskWorkLogWhereUniqueInput:

  • id: String!

Tips and tricks

  • operationName всегда надо передавать как пустую строку. Только если отправляется GraphQL запрос с несколькими отдельными запросами внутри, только тогда надо указывать явный operationName.