Сервер Apollo: как выполнить постобработку всех полей `id: ID` без директив?

#graphql #apollo-server #graphql-tools

#graphql #apollo-сервер #graphql-инструменты

Вопрос:

Наша схема выглядит следующим образом:

 type Product {
  id: ID!
  name: String!
}

type User {
  id: ID!
  firstName: String!
}
  

Серверная часть возвращает идентификаторы с автоматическим увеличением, мы хотим указать им префикс по типу, и в настоящее время мы используем для этого директивы:

 type Product {
  id: ID! @uniqueID
  name: String!
}

type User {
  id: ID! @uniqueID
  firstName: String!
}
  
 class UniqueIdDirective extends SchemaDirectiveVisitor {
  visitFieldDefinition(...) {
    ...
  }
}
  

Есть ли способ избежать добавления @uniqueID везде и просто зависеть от ID типа? Другими словами, можно ли написать посетителя схемы против нашей исходной схемы?

Ответ №1:

Да, это возможно, через mapSchema . Ответ был дан здесь: https://github.com/ardatan/graphql-tools/discussions/2126 .