Передача типа Enum в качестве параметра в запрос GraphQL - Quarkus

У меня возникают проблемы с передачей типа перечисления в качестве параметра при вызове запроса. У меня есть следующие соответствующие фрагменты:

Определение перечисления

    @Enum("ConfigurationEnum")
    @Description("The available configuration names")
    public enum ConfigurationEnum{
        allocation_projection("allocation.projection.maxHistoryDays"),
        testing_thingy("testing.graphql.config.service.save");

        private final String configurationValue;
        private ConfigurationEnum(String configurationValue){
            this.configurationValue = configurationValue;
        }

        @Override
        public String toString() {
            return this.configurationValue;
        }
    }

Конечная точка ресурса

    @Query("configurationByName")
    @Description("Get a configuration by name")
    @Transactional
    public Configuration getByName(@Name("name") ConfigurationEnum name){
        return Configuration.getByName(name.toString());
    }

Функциональная реализация

    @ApplicationScoped
    @Entity
    @Table(name="CONFIGURATION")
    public class Configuration extends PanacheEntityBase {

    @Id
    @NotNull
    private String name;
    private String value;

    public static Configuration getByName(String name){
        return find("name", name).firstResult();
    }

Мой пример запроса:

query searchByName {
  configurationByName(name: allocation_projection) {
    name
    value
  }
}

Результирующая ошибка:

"message": "Validation error of type WrongType: argument 'name' with value 'StringValue{value='allocation_projection'}' is not a valid 'Unknown Scalar Type


Желаемое поведение - передать аргумент в configurationByNameв качестве перечисления, затем обновите соответствующую запись в поле базы данных - значение перечисления. Используя скалярное значение, то есть передавая строку напрямую, все работает, как ожидалось. Мне нужно изменить тип аргумента со скаляра на перечисление. Как правило, я считаю, что это делается путем установки типа поля внутриbuildQueryTypeпри построении пользовательской схемы. Есть ли способ установить эту опцию в MicroProfile?

Я новичок в GraphQL в целом и особенно в парадигме MicroProfile, поэтому прошу прощения за любые простые упущения, которые я мог допустить - я не могу найти никакой документации с аналогичным случаем с использованием MicroProfile.

Спасибо!

1 ответ

Я воспроизвел вашу проблему с последней версией Quarkus (содержит SmallRye GraphQL 1.0.3), а затем попытался снова после обновления SmallRye GraphQL до последней версии 1.0.4-SNAPSHOT, и я больше не мог воспроизвести ее. Поэтому я думаю, что ваш код правильный и должен начать работать после обновления до версии Quarkus, содержащей SmallRye GraphQL 1.0.4+ (еще не выпущен, но должен быть скоро).

Другие вопросы по тегам