예제 #1
0
        public static ISchemaBuilder RegisterTypes(this ISchemaBuilder schemaBuilder)
        {
            schemaBuilder.AddType <ObjectType <User> >();
            schemaBuilder.AddType <ObjectType <Address> >();
            schemaBuilder.AddType <ObjectType <KeyValueEntity> >();

            return(schemaBuilder);
        }
예제 #2
0
 public static ISchemaBuilder AddCatalogSchemaBuilder(this ISchemaBuilder schemaBuilder)
 {
     return(schemaBuilder
            .AddType <CatalogQueries>()
            //.AddType<CatalogMutations>()
            .AddType <ProductType>());
 }
        public static ISchemaBuilder AddDirectiveType(
            this ISchemaBuilder builder,
            Type directiveType)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (directiveType == null)
            {
                throw new ArgumentNullException(nameof(directiveType));
            }

            if (directiveType == typeof(DirectiveType) ||
                (directiveType.IsGenericType &&
                 directiveType.GetGenericTypeDefinition() ==
                 typeof(DirectiveType <>)))
            {
                // TODO : resources
                throw new ArgumentException("df", nameof(directiveType));
            }

            if (!typeof(DirectiveType).IsAssignableFrom(directiveType))
            {
                // TODO : resources
                throw new ArgumentException("df", nameof(directiveType));
            }

            return(builder.AddType(directiveType));
        }
        public static ISchemaBuilder AddSchemaRegistry(
            this ISchemaBuilder builder,
            bool addRootTypes = true)
        {
            if (addRootTypes)
            {
                builder
                .AddQueryType(d => d.Name("Query"))
                .AddMutationType(d => d.Name("Mutation"))
                .AddSubscriptionType(d => d.Name("Subscription"));
            }

            return(builder
                   .AddType <EnvironmentQueries>()
                   .AddType <EnvironmentMutations>()
                   .AddType <SchemaQueries>()
                   .AddType <SchemaMutations>()
                   .AddType <SchemaSubscriptions>()
                   .AddType <SchemaExtension>()
                   .AddType <SchemaVersionExtension>()
                   .AddType <SchemaPublishReportExtension>()
                   .AddType <ClientQueries>()
                   .AddType <ClientMutations>()
                   .AddType <ClientExtension>()
                   .AddType <ClientVersionExtension>()
                   .AddType <QueryDocumentExtension>()
                   .BindClrType <string, StringType>()
                   .BindClrType <Guid, IdType>());
        }
        public static ISchemaBuilder AddDirectiveType(
            this ISchemaBuilder builder,
            Type directiveType)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (directiveType == null)
            {
                throw new ArgumentNullException(nameof(directiveType));
            }

            if (directiveType == typeof(DirectiveType) ||
                (directiveType.IsGenericType &&
                 directiveType.GetGenericTypeDefinition() ==
                 typeof(DirectiveType <>)))
            {
                throw new ArgumentException(
                          TypeResources.SchemaBuilderExtensions_DirectiveTypeIsBaseType,
                          nameof(directiveType));
            }

            if (!typeof(DirectiveType).IsAssignableFrom(directiveType))
            {
                throw new ArgumentException(
                          TypeResources.SchemaBuilderExtensions_MustBeDirectiveType,
                          nameof(directiveType));
            }

            return(builder.AddType(directiveType));
        }
예제 #6
0
        /// <summary>
        /// Adds GeoJSON compliant spatial types.
        /// </summary>
        /// <param name="builder">
        /// The <see cref="ISchemaBuilder"/>.
        /// </param>
        /// <returns>
        /// The <see cref="ISchemaBuilder"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="builder"/> is <c>null</c>.
        /// </exception>
        public static ISchemaBuilder AddSpatialTypes(this ISchemaBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder
                   .AddType <GeoJsonInterfaceType>()
                   .AddType <GeoJsonGeometryType>()
                   .AddType <GeoJsonPointInputType>()
                   .AddType <GeoJsonMultiPointInputType>()
                   .AddType <GeoJsonLineStringInputType>()
                   .AddType <GeoJsonMultiLineStringInputType>()
                   .AddType <GeoJsonPolygonInputType>()
                   .AddType <GeoJsonMultiPolygonInputType>()
                   .AddType <GeoJsonPointType>()
                   .AddType <GeoJsonMultiPointType>()
                   .AddType <GeoJsonLineStringType>()
                   .AddType <GeoJsonMultiLineStringType>()
                   .AddType <GeoJsonPolygonType>()
                   .AddType <GeoJsonMultiPolygonType>()
                   .AddType <GeoJsonGeometryEnumType>()
                   .AddType <GeometryType>()
                   .BindClrType <Coordinate, GeoJsonPositionType>());
        }
예제 #7
0
        /// <summary>
        /// Add the <see cref="TimeSpanType"/> scalar to the schema builder.
        /// </summary>
        /// <param name="builder">The schema builder.</param>
        /// <returns>The schema builder.</returns>
        public static ISchemaBuilder AddTimeSpanScalar(this ISchemaBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddType(typeof(TimeSpanType)));
        }
예제 #8
0
        public static ISchemaBuilder AddType <T>(
            this ISchemaBuilder builder)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddType(typeof(T)));
        }
예제 #9
0
        public static ISchemaBuilder AddInputObjectType <T>(
            this ISchemaBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddType(new InputObjectType <T>()));
        }
예제 #10
0
        public static ISchemaBuilder AddOurCommonGraphQLTypes(this ISchemaBuilder schemaBuilder)
        {
            // Ensure string still defaults to StringType
            schemaBuilder.BindClrType <string, StringType>();

            // Set a maximum page size
            schemaBuilder
            .AddType(new PaginationAmountType(50))
            .BindClrType <int, IntType>();

            return(schemaBuilder);
        }
    /// <summary>
    ///     Add nodatime types to HotChocolate
    /// </summary>
    /// <param name="schemaBuilder"></param>
    /// <returns></returns>
    public static ISchemaBuilder AddNodaTime(this ISchemaBuilder schemaBuilder)
    {
        schemaBuilder
        .AddFiltering()
        .AddConvention <IFilterConvention>(
            new FilterConventionExtension(
                descriptor => descriptor
                .BindRuntimeType <DateTimeZone, ComparableOperationFilterInputType <DateTimeZone> >()
                .BindRuntimeType <Duration, ComparableOperationFilterInputType <Duration> >()
                .BindRuntimeType <Duration?, ComparableOperationFilterInputType <Duration> >()
                .BindRuntimeType <Instant, ComparableOperationFilterInputType <Instant> >()
                .BindRuntimeType <Instant?, ComparableOperationFilterInputType <Instant> >()
                .BindRuntimeType <IsoDayOfWeek, ComparableOperationFilterInputType <IsoDayOfWeek> >()
                .BindRuntimeType <IsoDayOfWeek?, ComparableOperationFilterInputType <IsoDayOfWeek> >()
                .BindRuntimeType <LocalDateTime, ComparableOperationFilterInputType <LocalDateTime> >()
                .BindRuntimeType <LocalDateTime?, ComparableOperationFilterInputType <LocalDateTime> >()
                .BindRuntimeType <LocalDate, ComparableOperationFilterInputType <LocalDate> >()
                .BindRuntimeType <LocalDate?, ComparableOperationFilterInputType <LocalDate> >()
                .BindRuntimeType <LocalTime, ComparableOperationFilterInputType <LocalTime> >()
                .BindRuntimeType <LocalTime?, ComparableOperationFilterInputType <LocalTime> >()
                .BindRuntimeType <OffsetDateTime, ComparableOperationFilterInputType <OffsetDateTime> >()
                .BindRuntimeType <OffsetDateTime?, ComparableOperationFilterInputType <OffsetDateTime> >()
                .BindRuntimeType <OffsetDate, ComparableOperationFilterInputType <OffsetDate> >()
                .BindRuntimeType <OffsetDate?, ComparableOperationFilterInputType <OffsetDate> >()
                .BindRuntimeType <OffsetTime, ComparableOperationFilterInputType <OffsetTime> >()
                .BindRuntimeType <OffsetTime?, ComparableOperationFilterInputType <OffsetTime> >()
                .BindRuntimeType <Offset, ComparableOperationFilterInputType <Offset> >()
                .BindRuntimeType <Offset?, ComparableOperationFilterInputType <Offset> >()
                .BindRuntimeType <Period, ComparableOperationFilterInputType <Period> >()
                .BindRuntimeType <ZonedDateTime, ComparableOperationFilterInputType <ZonedDateTime> >()
                .BindRuntimeType <ZonedDateTime?, ComparableOperationFilterInputType <ZonedDateTime> >()
                )
            );

        return(schemaBuilder
               .AddType <DateTimeZoneType>()
               .AddType(new DurationType(DurationPattern.JsonRoundtrip, DurationPattern.Roundtrip))
               .AddType(new InstantType(InstantPattern.General, InstantPattern.ExtendedIso, new InstantDateTimeOffsetPattern()))
               .AddType <IsoDayOfWeekType>()
               .AddType(new LocalDateTimeType(LocalDateTimePattern.GeneralIso, LocalDateTimePattern.ExtendedIso, LocalDateTimePattern.BclRoundtrip))
               .AddType(new LocalDateType(LocalDatePattern.Iso, LocalDatePattern.FullRoundtrip))
               .AddType(new LocalTimeType(LocalTimePattern.ExtendedIso, LocalTimePattern.GeneralIso))
               .AddType(new OffsetDateTimeType(OffsetDateTimePattern.GeneralIso, OffsetDateTimePattern.FullRoundtrip))
               .AddType(new OffsetDateType(OffsetDatePattern.GeneralIso, OffsetDatePattern.FullRoundtrip))
               .AddType(new OffsetTimeType(OffsetTimePattern.Rfc3339, OffsetTimePattern.GeneralIso, OffsetTimePattern.ExtendedIso))
               .AddType(new OffsetType(OffsetPattern.GeneralInvariant, OffsetPattern.GeneralInvariantWithZ))
               .AddType(new PeriodType(PeriodPattern.Roundtrip, PeriodPattern.NormalizingIso))
               .AddType <ZonedDateTimeType>());
    }
        public static ISchemaBuilder AddObjectType <T>(
            this ISchemaBuilder builder,
            Action <IObjectTypeDescriptor <T> > configure)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            return(builder.AddType(new ObjectType <T>(configure)));
        }
예제 #13
0
        public static ISchemaBuilder AddInputObjectType(
            this ISchemaBuilder builder,
            Action <IInputObjectTypeDescriptor> configure)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (configure is null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            return(builder.AddType(new InputObjectType(configure)));
        }
예제 #14
0
        public static ISchemaBuilder AddEnumType(
            this ISchemaBuilder builder,
            Action <IEnumTypeDescriptor> configure)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            return(builder.AddType(new EnumType(configure)));
        }
예제 #15
0
        public static ISchemaBuilder ScanGraphTypes(this ISchemaBuilder builder, params Assembly[] assemblies)
        {
            var types = assemblies
                        .SelectMany(x => x.GetTypes()
                                    .Where(t => t != typeof(ObjectType) && typeof(ObjectType).IsAssignableFrom(t) &&
                                           t.GetCustomAttribute <GraphQueryTypeAttribute>() == null &&
                                           t.GetCustomAttribute <GraphMutationTypeAttribute>() == null &&
                                           t.GetCustomAttribute <GraphSubscriptionTypeAttribute>() == null)
                                    );

            foreach (var type in types)
            {
                builder.AddType(type);
            }

            return(builder);
        }
 public static ISchemaBuilder AddNodaTime(this ISchemaBuilder schemaBuilder)
 {
     return(schemaBuilder
            .AddType <DateTimeZoneType>()
            .AddType <DurationType>()
            .AddType <InstantType>()
            .AddType <IsoDayOfWeekType>()
            .AddType <LocalDateTimeType>()
            .AddType <LocalDateType>()
            .AddType <LocalTimeType>()
            .AddType <OffsetDateTimeType>()
            .AddType <OffsetDateType>()
            .AddType <OffsetTimeType>()
            .AddType <OffsetType>()
            .AddType <PeriodType>()
            .AddType <ZonedDateTimeType>());
 }
예제 #17
0
    /// <summary>
    /// Adds support for Apollo Federation to the schema.
    /// </summary>
    /// <param name="builder">
    /// The <see cref="ISchemaBuilder"/>.
    /// </param>
    /// <returns>
    /// Returns the <see cref="ISchemaBuilder"/>.
    /// </returns>
    /// <exception cref="ArgumentNullException">
    /// The <paramref name="builder"/> is <c>null</c>.
    /// </exception>
    public static ISchemaBuilder AddApolloFederation(
        this ISchemaBuilder builder)
    {
        if (builder is null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.AddType <AnyType>();
        builder.AddType <EntityType>();
        builder.AddType <ServiceType>();
        builder.AddType <ExternalDirectiveType>();
        builder.AddType <ProvidesDirectiveType>();
        builder.AddType <KeyDirectiveType>();
        builder.AddType <FieldSetType>();
        builder.AddType <RequiresDirectiveType>();
        builder.TryAddTypeInterceptor <FederationTypeInterceptor>();
        return(builder);
    }
예제 #18
0
        public static ISchemaBuilder AddInputObjectType <T>(
            this ISchemaBuilder builder)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (typeof(T).IsSchemaType() || typeof(T).IsNonGenericSchemaType())
            {
                throw new InvalidOperationException(
                          string.Format(
                              TypeResources.SchemaBuilderExtensions_AddInputObjectType_TIsSchemaType,
                              typeof(T).FullName));
            }

            return(builder.AddType(new InputObjectType <T>()));
        }
예제 #19
0
        public static ISchemaBuilder AddAllLocalTypes(this ISchemaBuilder builder)
        {
            var types = Assembly
                        .GetExecutingAssembly()
                        .GetTypes()
                        .Where(x => x.BaseType?.IsGenericType == true &&
                               (x.BaseType.GetGenericTypeDefinition() == typeof(ObjectType <>) ||
                                x.BaseType.GetGenericTypeDefinition() == typeof(InterfaceType <>) ||
                                x.BaseType.GetGenericTypeDefinition() == typeof(UnionType <>) ||
                                x.BaseType.GetGenericTypeDefinition() == typeof(InputObjectType <>) ||
                                x.BaseType.GetGenericTypeDefinition() == typeof(EnumType <>)));

            foreach (var type in types)
            {
                builder.AddType(type);
            }

            return(builder);
        }
        public static ISchemaBuilder AddTypes(
            this ISchemaBuilder builder,
            params Type[] types)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (types == null)
            {
                throw new ArgumentNullException(nameof(types));
            }

            foreach (Type type in types)
            {
                builder.AddType(type);
            }
            return(builder);
        }
예제 #21
0
        public static ISchemaBuilder AddSpatialTypes(this ISchemaBuilder builder)
        {
            return(builder
                   .AddType <GeoJSONInterface>()
                   .AddType <GeoJSONGeometryType>()

                   .AddType <GeoJSONPointInput>()
                   .AddType <GeoJSONMultiPointInput>()
                   .AddType <GeoJSONLineStringInput>()
                   .AddType <GeoJSONMultiLineStringInput>()
                   .AddType <GeoJSONPolygonInput>()
                   .AddType <GeoJSONMultiPolygonInput>()

                   .AddType <GeoJSONPointType>()
                   .AddType <GeoJSONMultiPointType>()
                   .AddType <GeoJSONLineStringType>()
                   .AddType <GeoJSONMultiLineStringType>()
                   .AddType <GeoJSONPolygonType>()
                   .AddType <GeoJSONMultiPolygonType>()

                   .BindClrType <Coordinate, GeoJSONPositionScalar>());
        }
예제 #22
0
 public static ISchemaBuilder AddTypes(this ISchemaBuilder builder)
 {
     builder
     .AddType <MediaTypeEnum>()
     .AddType <InterviewType> ()
     .AddType <UserType> ()
     .AddType <MultipleChoiceQuestionType>()
     .AddType <TextQuestionType>()
     .AddType <RangeQuestionType>()
     .AddType <TextAnswerFormatType>()
     .AddType <VideoAnswerFormatType>()
     .AddType <AudioAnswerFormatType>()
     .AddType <RangeOptionInputType>()
     .AddType <AttachmentInputType>()
     .AddType <OptionInputType>()
     .AddType <TextQuestionInputType>()
     .AddType <InterchangeTemplateCreateCommandInputType>()
     .AddType <InterviewRoundCreateCommandInputType>()
     .AddType <InterviewCreateCommandInputType>()
     .AddQueryType <RootQuery>()
     .AddMutationType <Mutation>();
     return(builder);
 }
예제 #23
0
        public static ISchemaBuilder AddInterfaceType <T>(
            this ISchemaBuilder builder,
            Action <IInterfaceTypeDescriptor <T> > configure)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (configure is null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            if (typeof(T).IsSchemaType() || typeof(T).IsNonGenericSchemaType())
            {
                throw new InvalidOperationException(
                          string.Format(
                              TypeResources.SchemaBuilderExtensions_AddInterfaceType_TIsSchemaType,
                              typeof(T).FullName));
            }

            return(builder.AddType(new InterfaceType <T>(configure)));
        }
 public static void ModifySchemaDuringBuild(ISchemaBuilder schemaBuilder)
 {
     // add "relationToMe" to the User graph... but how?
     schemaBuilder.AddType<PublicUserGraphTypeExtension>();
 }
예제 #25
0
 public static ISchemaBuilder AddInventorySchemaBuilder(this ISchemaBuilder schemaBuilder)
 {
     return(schemaBuilder
            .AddType <InventoryQueries>()
            .AddType <InventoryType>());
 }
예제 #26
0
        public IRequestExecutor CreateSchema <TEntity>(
            TEntity[] entities,
            ProjectionProvider?provider           = null,
            Action <ModelBuilder>?onModelCreating = null,
            bool usePaging                    = false,
            bool useOffsetPaging              = false,
            INamedType?objectType             = null,
            Action <ISchemaBuilder>?configure = null)
            where TEntity : class
        {
            provider ??= new QueryableProjectionProvider(x => x.AddDefaults());
            var convention = new ProjectionConvention(x => x.Provider(provider));

            Func <IResolverContext, IQueryable <TEntity> > resolver =
                BuildResolver(onModelCreating, entities);

            ISchemaBuilder builder = SchemaBuilder.New();

            if (objectType is not null)
            {
                builder.AddType(objectType);
            }

            configure?.Invoke(builder);

            builder
            .AddConvention <IProjectionConvention>(convention)
            .AddProjections()
            .AddFiltering()
            .AddSorting()
            .AddQueryType(
                new ObjectType <StubObject <TEntity> >(
                    c =>
            {
                c.Name("Query");

                ApplyConfigurationToFieldDescriptor <TEntity>(
                    c.Field(x => x.Root).Resolve(resolver),
                    usePaging,
                    useOffsetPaging);

                ApplyConfigurationToFieldDescriptor <TEntity>(
                    c.Field("rootExecutable")
                    .Resolve(ctx => resolver(ctx).AsExecutable()),
                    usePaging,
                    useOffsetPaging);
            }));

            builder.ModifyOptions(o => o.ValidatePipelineOrder = false);

            ISchema schema = builder.Create();

            return(new ServiceCollection()
                   .Configure <RequestExecutorSetup>(Schema.DefaultName, o => o.Schema = schema)
                   .AddGraphQL()
                   .UseRequest(
                       next => async context =>
            {
                await next(context);
                if (context.Result is IReadOnlyQueryResult result &&
                    context.ContextData.TryGetValue("sql", out object?queryString))
                {
                    context.Result =
                        QueryResultBuilder
                        .FromResult(result)
                        .SetContextData("sql", queryString)
                        .Create();
                }
            })
                   .UseDefaultPipeline()
                   .Services
                   .BuildServiceProvider()
                   .GetRequiredService <IRequestExecutorResolver>()
                   .GetRequestExecutorAsync()
                   .Result);
        }
 public static ISchemaBuilder AddRoot <TRootType>(this ISchemaBuilder schemaBuilder, IServiceCollection services)
 {
     ConfigureDependencyInjectionForType(typeof(TRootType), services);
     schemaBuilder.AddType <TRootType>();
     return(schemaBuilder);
 }
 public static void ModifySchemaDuringBuild(ISchemaBuilder schemaBuilder)
 {
     // add "forAdminEyesOnly" to the User graph... but how?
     schemaBuilder.AddType <PrivateUserGraphTypeExtension>();
 }
예제 #29
0
        /// <summary>
        /// Add rich scalars to the schema builder.
        /// </summary>
        /// <param name="builder">The schema builder.</param>
        /// <param name="units">The rich scalars to add.</param>
        /// <returns>The schema builder.</returns>
        public static ISchemaBuilder AddRichScalars(this ISchemaBuilder builder, params Unit[] units)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            foreach (var unit in units)
            {
                switch (unit)
                {
                case Unit.Seconds:
                    builder.AddType(typeof(SecondsType));
                    break;

                case Unit.Hours:
                    builder.AddType(typeof(HoursType));
                    break;

                case Unit.Days:
                    builder.AddType(typeof(DaysType));
                    break;

                case Unit.Degrees:
                    builder.AddType(typeof(DegreesType));
                    break;

                case Unit.Radians:
                    builder.AddType(typeof(RadiansType));
                    break;

                case Unit.Meters:
                    builder.AddType(typeof(MetersType));
                    break;

                case Unit.MetersPerSecond:
                    builder.AddType(typeof(MetersPerSecondType));
                    break;

                case Unit.SquareMeters:
                    builder.AddType(typeof(SquareMetersType));
                    break;

                case Unit.Kilometers:
                    builder.AddType(typeof(KilometersType));
                    break;

                case Unit.KilometersPerHour:
                    builder.AddType(typeof(KilometersPerHourType));
                    break;

                case Unit.SquareKilometers:
                    builder.AddType(typeof(SquareKilometersType));
                    break;

                case Unit.Miles:
                    builder.AddType(typeof(MilesType));
                    break;

                case Unit.MilesPerHour:
                    builder.AddType(typeof(MilesPerHourType));
                    break;

                case Unit.SquareMiles:
                    builder.AddType(typeof(SquareMilesType));
                    break;

                default:
                    break;
                }
            }

            return(builder);
        }