Тип даты для определенного свойства с Pure Code First Hot Chocolate GraphQL

Сначала я использую чистый код с Hot Chocolate, но у меня есть тип dateTime C #, и у меня возникают проблемы с неправильным преобразованием часового пояса в javascript. Поэтому я хотел бы, чтобы он выводил Date вместо объекта DateTime. На данный момент я использую

 SchemaBuilder.New()
 .BindClrType<DateTime, DateType>()

но это очень грубый подход, так как теперь я никогда не могу вывести тип DateTime в graphQL.

Есть ли способ поместить атрибут в свойство или настроить его где-нибудь, чтобы конкретное свойство класса выводилось как Date вместо DateTime?


person Nick Gelotte    schedule 15.05.2020    source источник


Ответы (2)


Вы также можете использовать подход Pure Code First, присвоив целевому полю атрибут GraphQLType:

using HotChocolate;

public class User
{
    public int Id { get; set; }

    [GraphQLType(typeof(NonNullType<DateType>))]
    public DateTime BirthDate { get; set; }
}
person Gregory Nickonov    schedule 23.06.2020
comment
Это тоже работает. Он также остается в подходе Pure Code First, который мне нравится. Спасибо за публикацию. - person Nick Gelotte; 23.06.2020

Да, есть довольно простой способ достичь этого. Предположим, у вас есть класс User:

public class User
{
    public int Id { get; set; }

    public DateTime BirthDate { get; set; }
}

Чтобы иметь возможность указать, что BirthDate - это просто дата, а не datetime, определите «метаданные типа» пользователя и укажите тип GraphQL для BirthDate как «DateType»:

public class UserType : ObjectType<User>
{
    protected override void Configure(IObjectTypeDescriptor<User> descriptor)
    {
        descriptor.Field(t => t.BirthDate).Type<DateType>();
    }
}

и зарегистрируйте этот тип при построении схемы:

public void ConfigureServices(IServiceCollection services)
{
        services.AddGraphQL(sp =>
            SchemaBuilder.New()         
                .AddQueryType<Query>()
                .AddType<UserType>()
                .Create());
}
person ademchenko    schedule 15.06.2020