Может ли enum возвращать описание (строку) в GraphQL? - PullRequest
0 голосов
/ 14 мая 2018

Я борюсь с моим API GraphQL, потому что мне нужно использовать преимущества Enums, сохраняя их полное описание в веб-интерфейсе.

Короче говоря: У меня есть разные состояния для продукта: "Has been sent", "Not sent yet", "Received". Так что это правильное место для использования Enums:

enum ProductState {
  HAS_BEEN_SENT
  NOT_SENT_YET
  RECEIVED
}

Но мне нужно отобразить правильные строки на внешнем интерфейсе ("Has been sent", а не "HAS_BEEN_SENT").

Я не могу использовать простое решение, как «заменить подчеркивания пробелами и строчными буквами», потому что мой API не на английском, а на французском (поэтому у меня есть акценты и специальные символы).

Разве Enum не может вернуть строку? Или объект? Я пытался с директивами, но невозможно заставить его работать ...

На самом деле мне все равно, как это записано в базе данных (в верхнем или нижнем регистре) или в API GraphQL. Мне просто нужен мой клиент для доступа к различным состояниям продукта в их «французской» форме.

1 Ответ

0 голосов
/ 05 апреля 2019

Насколько я знаю, существует только один поддерживаемый синтаксис для определения перечислений в GRAPHQL, который вы используете. Вы не можете связать перечисление со строковым значением.

#NOTE: I would probably use a more descriptive name as opposed to ProductState
enum AllowedProductStatus { 
  HAS_BEEN_SENT
  NOT_SENT_YET
  RECEIVED
}

Однако, если вы используете сервер apollo, вы можете использовать преобразователи для добавления пользовательских значений.

const resolvers = {
  AllowedProductStatus: {
    HAS_BEEN_SENT: "Has been sent", 
    NOT_SENT_YET: "Not sent yet", 
    RECEIVED: "Received"
  }
};

В качестве альтернативы, если вы просто хотите сделать его уникальным, вы также можете использовать директиву @ unique

type Product {
  status: String! @unique
}

Надеюсь, это было полезно.

...