Beispiel #1
0
        private void AddSearch <TEntity, TModel>(string[] issuers,
                                                 InputBuilderFactory inputBuilderFactory, string deleteMessage) where TEntity : class
        {
            string tenantSearchApiKey = _configuration["Search:ApiKey"];
            string tenantServiceName  = _configuration["Search:ServiceName"];

            foreach (var issuer in issuers)
            {
                var builder = inputBuilderFactory.Create <TEntity>(this)
                              .AssertWithClaimsPrincipal(DefaultAssertion)
                              .DeleteAll(() => new Status {
                    Message = deleteMessage
                })
                              .ConfigureSearchWith <TEntity, TModel>()
                              .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                              .AddApiKey(tenantSearchApiKey)
                              .AddServiceName(tenantServiceName);

                var prefix = _configuration.IsLocalEnvironment()
                                        ? "lcl"
                                        : (_configuration["EnableDeleteAll"] == "true" ? "stg" : "");

                if (!string.IsNullOrEmpty(prefix))
                {
                    builder.AddPrefix(prefix);
                }

                builder.BuildSearch().Build();
            }
        }
        public MutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            inputBuilderFactory.Create <MyQuiz>(this)
            .ConfigureTableStorage <MyQuiz>()
            .AddConnectionString(configuration["Connection"])
            .AddPrefix(configuration["Prefix"])
            .AddPartition(x => x.Owner)
            .BuildTableStorage()
            .Delete <DeleteMyQuiz, Status>(x => new MyQuiz {
                Id = x.Id, Owner = x.Owner
            }, x => new Status {
                Message = "Quiz has been removed."
            })
            .Build();

            inputBuilderFactory.Create <Question>(this)
            .ConfigureTableStorage <Question>()
            .AddConnectionString(configuration["Connection"])
            .AddPrefix(configuration["Prefix"])
            .AddPartition(x => x.QuizId)
            .BuildTableStorage()
            .Delete <DeleteMyQuestion, Status>(x => new Question {
                Id = x.Id, Owner = x.Owner, QuizId = x.QuizId
            }, x => new Status {
                Message = "Question has been removed."
            })
            .Build();
        }
Beispiel #3
0
        public TestInMemoryMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            inputBuilderFactory.Create <Model1>(this)
            .ConfigureInMemory <Model1>()
            .BuildInMemory()
            .DeleteAll(() => new Status {
                Message = "All Model1 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model2>(this)
            .ConfigureInMemory <Model2>()
            .BuildInMemory()
            .DeleteAll(() => new Status {
                Message = "All Model2 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model3>(this)
            .ConfigureInMemory <Model3>()
            .BuildInMemory()
            .DeleteAll(() => new Status {
                Message = "All Model3 have been removed."
            })
            .Build();
        }
Beispiel #4
0
        public ReadOnlyMutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            inputBuilderFactory.Create <MyQuiz>(this)
            .DisableBatchCreate()
            .DisableBatchCreateOrUpdate()
            .DisableCreate()
            .DisableCreateOrUpdate()
            .DisableDelete()
            .DisableUpdate()
            .ConfigureTableStorage <MyQuiz>()
            .AddConnectionString(configuration["Connection"])
            .AddPrefix(configuration["Prefix"])
            .AddPartition(x => x.Owner)
            .BuildTableStorage()

            .Build();

            inputBuilderFactory.Create <Question>(this)
            .DisableBatchCreate()
            .DisableBatchCreateOrUpdate()
            .DisableCreate()
            .DisableCreateOrUpdate()
            .DisableDelete()
            .DisableUpdate()
            .ConfigureTableStorage <Question>()
            .AddConnectionString(configuration["Connection"])
            .AddPrefix(configuration["Prefix"])
            .AddPartition(x => x.QuizId)
            .BuildTableStorage()
            .Build();
        }
        public AdminMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration, ILogger logger)
        {
            _configuration = configuration;
            _logger        = logger;
            _logger.LogInformation("Building mutations.");

            Add <Organization, ItemWithGuidId>(inputBuilderFactory, builder => builder.AddPartition(x => x.Type));
        }
Beispiel #6
0
        public MutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            //--Begin--

            //--End--
        }
Beispiel #7
0
        public MyMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration, IOrganizationsRepository organizationsRepository, ILogger logger)
        {
            _configuration = configuration;
            _logger        = logger;
            _logger.LogInformation("Building app mutations.");

            Name = "mutations";

            var issuers = organizationsRepository.GetIssuers().GetAwaiter().GetResult();

            if (issuers.Length == 0)
            {
                throw new ArgumentException("Issuer(s) not configured.");
            }

            _logger.LogInformation($"{issuers.Length} issuers are configured.");

            Add <Employee, ItemWithGuidId>(issuers, inputBuilderFactory, builder => builder.AddPartition(x => x.Department));
            Add <Exam, ItemWithGuidId>(issuers, inputBuilderFactory, builder => builder.AddPartition(x => x.Category));
            Add <Publication, ItemWithGuidId>(issuers, inputBuilderFactory, builder => builder.AddPartition(x => x.Year));
            Add <TestResult, ItemWithGuidId>(issuers, inputBuilderFactory, builder => builder.AddPartition(x => x.Location));

            AddSearch <ExamSearch, Exam>(issuers, inputBuilderFactory, "Exam search template index has been removed.");
            AddSearch <EmployeeSearch, Employee>(issuers, inputBuilderFactory, "Employee search template index has been removed.");

            string key          = _configuration["DocumentDb:Key"];
            string url          = _configuration["DocumentDb:Url"];
            int    requestUnits = Convert.ToInt32(_configuration["DocumentDb:RequestUnits"]);

            foreach (var issuer in issuers)
            {
                string db = issuer.GetTenantIdFromIssuer();

                db = _configuration.IsLocalEnvironment() ? $"lcl{db}" :
                     (_configuration["EnableDeleteAll"] == "true" ? $"stg{db}" : db);

                inputBuilderFactory.Create <ConnectionEdge>(this)
                .ConfigureDocumentDb <ConnectionEdge>()
                .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                .AddKey(key)
                .AddUrl(url)
                .AddRequestUnit(requestUnits)
                .AddDatabase(db)
                .AddPartition(x => x.SourceId)
                .BuildDocumentDb()
                .DeleteAll(() => new Status {
                    Message = "All ConnectionEdges have been removed."
                })
                .Build();
            }
        }
Beispiel #8
0
        public TestDocumentDbWithPermissionsMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            var          key          = configuration["DocumentDb:Key"];
            var          url          = configuration["DocumentDb:Url"];
            var          requestUnits = Convert.ToInt32(configuration["DocumentDb:RequestUnits"]);
            const string db           = "docDb";

            inputBuilderFactory.Create <TestPermissionModel1>(this)
            .AssertWithClaimsPrincipal(DefaultAdminAssertion)
            .ConfigureDocumentDb <TestPermissionModel1>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Category)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All TestPermissionModel1 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <TestPermissionModel2>(this)
            .AssertWithClaimsPrincipal(DefaultTenantAssertion)
            .ConfigureDocumentDb <TestPermissionModel2>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Category)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All TestPermissionModel2 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <TestPermissionModel3>(this)
            .AssertWithClaimsPrincipal(DefaultAdminAssertion)
            .ConfigureDocumentDb <TestPermissionModel3>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Category)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All TestPermissionModel3 have been removed."
            })
            .Build();
        }
        private void Add <TEntity, TDeleteEntity>(
            InputBuilderFactory inputBuilderFactory,
            Action <DocumentDbConfiguration <TEntity> > action) where TEntity : class, IEntityWithGuidId, new() where TDeleteEntity : IEntityWithGuidId, new()
        {
            var configuration = _configuration.GetSection("Admin");
            var issuer        = configuration["Issuer"];

            _logger.LogInformation($"Setting up admin: {issuer}.");

            string adminDocumentDbKey = configuration["DocumentDb:Key"];
            string adminDocumentDbUrl = configuration["DocumentDb:Url"];
            int    adminRequestUnits  = Convert.ToInt32(configuration["DocumentDb:RequestUnits"]);

            string databaseName = configuration["DatabaseName"];

            databaseName = _configuration.IsLocalEnvironment() ? $"lcl{databaseName}" :
                           (_configuration["EnableDeleteAll"] == "true" ? $"stg{databaseName}" : databaseName);

            var builder = inputBuilderFactory.Create <TEntity>(this)
                          .AssertWithClaimsPrincipal(DefaultAssertion)
                          .Delete <TDeleteEntity, Status>(
                input => new TEntity {
                Id = input.Id
            },
                item => new Status {
                Message = $"Successfully removed item with Id {item.Id}"
            })
                          .ConfigureDocumentDb <TEntity>()
                          .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                          .AddUrl(adminDocumentDbUrl)
                          .AddKey(adminDocumentDbKey)
                          .AddDatabase(databaseName)
                          .AddRequestUnit(adminRequestUnits);

            action?.Invoke(builder);

            var model = builder.BuildDocumentDb();

            // DeleteAll is only applicable in local testing environment.
            if (_configuration.IsLocalEnvironment() || _configuration["EnableDeleteAll"] == "true")
            {
                model.DeleteAll(() => new Status {
                    Message = "All entities are removed."
                });
            }

            model.Build();
        }
Beispiel #10
0
        public MutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            //--Begin--
            inputBuilderFactory.Create <ConnectionEdge>(this)
            .ConfigureTableStorage <ConnectionEdge>()
            .AddConnectionString(configuration["Storage:ConnectionString"])
            .AddPartition(x => x.SourceId)
            .BuildTableStorage()
            .Build();

            this.Add <Product, string>(inputBuilderFactory, configuration, x => x.Category);
            this.Add <Customer, string>(inputBuilderFactory, configuration, x => x.State);
            this.Add <Order, bool>(inputBuilderFactory, configuration, x => x.IsActive);
            //--End--
        }
Beispiel #11
0
        public TestSearchMutation2(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            var api         = configuration["Search:ApiKey"];
            var serviceName = configuration["Search:ServiceName"];

            inputBuilderFactory.Create <MySearch4>(this)
            .DeleteAll(() => new Status {
                Message = "All MySearch searches have been deleted."
            })
            .ConfigureSearch <MySearch4>()
            .AddApiKey(api)
            .AddServiceName(serviceName)
            .AddPrefix("lcl1")
            .BuildSearch()
            .Build();
        }
 public static void Add <T, TProperty>(
     this MutationObjectGraphType mutation,
     InputBuilderFactory inputBuilderFactory,
     IConfiguration configuration,
     Expression <Func <T, TProperty> > expression) where T : class, IIdEntity, new()
 {
     inputBuilderFactory.Create <T>(mutation)
     .ConfigureTableStorage <T>()
     .AddConnectionString(configuration["Storage:ConnectionString"])
     .AddPartition(expression)
     .BuildTableStorage()
     .Delete <IdInput, Status>(m => new T {
         Id = m.Id
     }, t => new Status())
     .DeleteAll(() => new Status {
         Message = "All entities removed."
     })
     .Build();
 }
        public MutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            //--Begin--
            inputBuilderFactory.Create <ConnectionEdge>(this)
            .ConfigureDocumentDb <ConnectionEdge>()
            .AddDatabase(configuration["Db:Name"])
            .AddPartition(x => x.SourceId)
            .AddRequestUnit(Convert.ToInt32(configuration["Db:RequestUnits"]))
            .AddKey(configuration["Db:Key"])
            .AddUrl(configuration["Db:Url"])
            .BuildDocumentDb()
            .Build();

            this.Add <Product, string>(inputBuilderFactory, configuration, x => x.Category);
            this.Add <Customer, string>(inputBuilderFactory, configuration, x => x.State);
            this.Add <Order, bool>(inputBuilderFactory, configuration, x => x.IsActive);
            //--End--
        }
 public static void Add <T, TProperty>(
     this MutationObjectGraphType mutation,
     InputBuilderFactory inputBuilderFactory,
     IConfiguration configuration,
     Expression <Func <T, TProperty> > expression) where T : class, IIdEntity, new()
 {
     inputBuilderFactory.Create <T>(mutation)
     .ConfigureDocumentDb <T>()
     .AddDatabase(configuration["Db:Name"])
     .AddPartition(expression)
     .AddRequestUnit(Convert.ToInt32(configuration["Db:RequestUnits"]))
     .AddKey(configuration["Db:Key"])
     .AddUrl(configuration["Db:Url"])
     .BuildDocumentDb()
     .Delete <IdInput, Status>(m => new T {
         Id = m.Id
     }, t => new Status())
     .DeleteAll(() => new Status {
         Message = "All entities removed."
     })
     .Build();
 }
Beispiel #15
0
        public MutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            // 1) Use in memory repository to store Product information.
            inputBuilderFactory.Create <Product>(this)
            .ConfigureInMemory <Product>()
            .BuildInMemory()                        // 2) Nothing to configure.
            .Build();                               // 3) Build the type.

            // Use in memory repository to store Customer information.
            inputBuilderFactory.Create <Customer>(this)
            .ConfigureInMemory <Customer>()
            .BuildInMemory()
            .Build();;

            // Use in memory repository to store Order information.
            inputBuilderFactory.Create <Order>(this)
            .ConfigureInMemory <Order>()
            .BuildInMemory()
            .Build();;
        }
Beispiel #16
0
        public TestSearchMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            var conn = configuration["TableStorage:ConnectionString"];

            inputBuilderFactory.Create <Model1>(this)
            .ConfigureTableStorage <Model1>()
            .AddConnectionString(conn)
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model1 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model2>(this)
            .ConfigureTableStorage <Model2>()
            .AddConnectionString(conn)
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model2 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model3V2>(this)
            .ConfigureTableStorage <Model3V2>()
            .AddConnectionString(conn)
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model3 have been removed."
            })
            .Build();

            var api         = configuration["Search:ApiKey"];
            var serviceName = configuration["Search:ServiceName"];

            inputBuilderFactory.Create <MySearch1>(this)
            .DeleteAll(() => new Status {
                Message = "All MySearch1 searches have been deleted."
            })
            .ConfigureSearchWith <MySearch1, Model1>()
            .AddApiKey(api)
            .AddServiceName(serviceName)
            .AddPrefix("lcl1")
            .BuildSearch()
            .Build();

            inputBuilderFactory.Create <MySearch2>(this)
            .DeleteAll(() => new Status {
                Message = "All MySearch searches have been deleted."
            })
            .ConfigureSearchWith <MySearch2, Model2>()
            .AddApiKey(api)
            .AddServiceName(serviceName)
            .AddPrefix("lcl1")
            .BuildSearch()
            .Build();

            inputBuilderFactory.Create <MySearch3>(this)
            .DeleteAll(() => new Status {
                Message = "All MySearch searches have been deleted."
            })
            .ConfigureSearchWith <MySearch3, Model3V2>()
            .AddApiKey(api)
            .AddServiceName(serviceName)
            .AddPrefix("lcl1")
            .BuildSearch()
            .Build();
        }
        public TestDocumentDbMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            var          key          = configuration["DocumentDb:Key"];
            var          url          = configuration["DocumentDb:Url"];
            var          requestUnits = Convert.ToInt32(configuration["DocumentDb:RequestUnits"]);
            const string db           = "docDb";

            inputBuilderFactory.Create <Model1>(this)
            .ConfigureDocumentDb <Model1>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model1 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model2>(this)
            .ConfigureDocumentDb <Model2>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model2 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model3>(this)
            .ConfigureDocumentDb <Model3>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model3 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model4>(this)
            .ConfigureDocumentDb <Model4>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model4 have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model5>(this)
            .ConfigureDocumentDb <Model5>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model5 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model5Friend>(this)
            .ConfigureDocumentDb <Model5Friend>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model5Friend have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model6>(this)
            .ConfigureDocumentDb <Model6>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model6 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model6Friend>(this)
            .ConfigureDocumentDb <Model6Friend>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model6Friend have been removed."
            })
            .Build();

            inputBuilderFactory.Create <ConnectionEdge>(this)
            .ConfigureDocumentDb <ConnectionEdge>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.SourceId)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All ConnectionEdges have been removed."
            })
            .Build();

            inputBuilderFactory.Create <Model7>(this)
            .ConfigureDocumentDb <Model7>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model7 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model8>(this)
            .ConfigureDocumentDb <Model8>()
            .AddKey(key)
            .AddUrl(url)
            .AddRequestUnit(requestUnits)
            .AddDatabase(db)
            .AddPartition(x => x.Field)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All Model8 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();
        }
Beispiel #18
0
        public BooksMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutations";

            inputBuilderFactory.Create <Book>(this)
            .Delete <BookId, Status>(
                bookInput => new Book {
                Id = bookInput.Id
            },
                book => new Status {
                Message = $"Successfully removed book with Id {book.Id}"
            })
            .ConfigureInMemory <Book>().BuildInMemory()
            .DeleteAll(() => new Status {
                Message = "All books have been removed."
            })
            .Build();

            // You want to store these settings somewhere safe and access using services like Azure KeyVault.

            string documentDbKey = configuration["DocumentDb:Key"];
            string documentDbUrl = configuration["DocumentDb:Url"];

            var tenants = configuration.GetSection("Tenants").GetChildren().ToList();

            tenants.ForEach(tenant =>
            {
                var issuer = tenant["Issuer"];

                string tenantDocumentDbKey = tenant["DocumentDb:Key"];
                string tenantDocumentDbUrl = tenant["DocumentDb:Url"];
                int tenantRequestUnits     = Convert.ToInt32(tenant["DocumentDb:RequestUnits"]);

                inputBuilderFactory.Create <Reviewer>(this)
                .AssertWithClaimsPrincipal(DefaultAssertion)
                .Delete <ReviewerId, Status>(
                    reviewerInput => new Reviewer {
                    Id = reviewerInput.Id
                },
                    bookReview => new Status {
                    Message = $"Successfully removed reviewer with Id {bookReview.Id}"
                })
                .ConfigureDocumentDb <Reviewer>()
                .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                .AddUrl(tenantDocumentDbUrl)
                .AddKey(tenantDocumentDbKey)
                .AddDatabase(issuer.GetTenantIdFromIssuer())
                .AddRequestUnit(tenantRequestUnits)
                .AddPartition(reviewer => reviewer.Region)
                .BuildDocumentDb()
                .DeleteAll(() => new Status {
                    Message = "All reviewers have been removed."
                })                                                                                                       // Used more for local development to reset local database than having any operational value.
                .Build();

                string tenantSearchApiKey = tenant["Search:ApiKey"];
                string tenantServiceName  = tenant["Search:ServiceName"];

                inputBuilderFactory.Create <BookSearch>(this)
                .AssertWithClaimsPrincipal(DefaultAssertion)
                .DeleteAll(() => new Status {
                    Message = "All book searches have been deleted."
                })
                .ConfigureSearch <BookSearch>()
                .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                .AddApiKey(tenantSearchApiKey)
                .AddServiceName(tenantServiceName)
                .BuildSearch()
                .Build();

                inputBuilderFactory.Create <ReviewerSearch>(this)
                .AssertWithClaimsPrincipal(DefaultAssertion)
                .DeleteAll(() => new Status {
                    Message = "All reviewer searches have been deleted."
                })
                .ConfigureSearchWith <ReviewerSearch, Reviewer>()
                .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                .AddApiKey(tenantSearchApiKey)
                .AddServiceName(tenantServiceName)
                .AddPrefix("stg")
                .BuildSearch()
                .Build();

                string tenantTableStorageConnectionString = tenant["TableStorage:ConnectionString"];

                inputBuilderFactory.Create <Author>(this)
                .AssertWithClaimsPrincipal(DefaultAssertion)
                .ConfigureTableStorage <Author>()
                .AddConnectionString(tenantTableStorageConnectionString)
                .AddGraphRequestContextSelector(ctx => ctx.ContainsIssuer(issuer))
                .AddPartition(x => x.HomeCity)
                .BuildTableStorage()
                .DeleteAll(() => new Status {
                    Message = "All authors have been removed."
                })
                .Build();
            });



            inputBuilderFactory.Create <BookAuthors>(this)
            .ConfigureInMemory <BookAuthors>().BuildInMemory()
            .ConfigureInMemory <Author>().BuildInMemory()
            .ConfigureInMemory <Book>().BuildInMemory()
            .DeleteAll(() => new Status {
                Message = "All book authors relationships have been removed."
            })
            .Build();

            inputBuilderFactory.Create <BookReview>(this)
            .Delete <BookReviewId, Status>(
                bookReviewInput => new BookReview {
                Id = bookReviewInput.Id
            },
                bookReview => new Status {
                Message = $"Successfully removed book review with Id {bookReview.Id}"
            })
            .ConfigureDocumentDb <BookReview>()
            .AddUrl(documentDbUrl)
            .AddKey(documentDbKey)
            .AddDatabase("local")
            .AddRequestUnit(400)
            .AddPartition(bookReview => bookReview.ReviewerId)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All book reviews relationships have been removed."
            })
            .Build();

            const string publishersResource = "publishers";

            inputBuilderFactory.Create <Publisher>(this)
            .ConfigureHttp <Publisher>()
            .AddBaseUrl(configuration["ApiBaseUrl"])
            .AddResource(publisher => new HttpResource {
                AppendUrl = publishersResource, Method = HttpMethod.Post
            })
            .UpdateResource(publisher => new HttpResource {
                AppendUrl = $"{publishersResource}/{publisher.Id}", Method = HttpMethod.Put
            })
            .DeleteResource(publisher => new HttpResource {
                AppendUrl = $"{publishersResource}/{publisher.Id}", Method = HttpMethod.Delete
            })
            .QueryResource(PublisherQueryExtensions.GetPublisherByIdQuery, items => new HttpQueryResource
            {
                AppendUrl = $"{publishersResource}/{items["id"]}",
                QueryType = HttpQueryTypes.AppendToUrl
            })
            .DeleteAllResource(() => new HttpResource {
                AppendUrl = publishersResource, Method = HttpMethod.Delete
            })
            .BuildHttp()
            .DeleteAll(() => new Status {
                Message = "All publishers have been removed."
            })
            .Build();


            inputBuilderFactory.Create <BookPrice>(this)
            .Delete <BookPriceId, Status>(
                input => new BookPrice {
                Id = input.Id
            },
                input => new Status {
                Message = $"Successfully removed book review with Id {input.Id}"
            })
            .ConfigureDocumentDb <BookPrice>()
            .AddUrl(documentDbUrl)
            .AddKey(documentDbKey)
            .AddDatabase("local")
            .AddRequestUnit(400)
            .AddPartition(input => input.Type)
            .BuildDocumentDb()
            .DeleteAll(() => new Status {
                Message = "All book price relationships have been removed."
            })
            .Build();
        }
Beispiel #19
0
        public PagingBooksMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutations";

            inputBuilderFactory.Create <Book>(this).ConfigureInMemory <Book>().BuildInMemory().Build();
        }
Beispiel #20
0
        public TestStorageMutationObjectGraphType(InputBuilderFactory inputBuilderFactory, IConfiguration configuration)
        {
            Name = "mutation";

            inputBuilderFactory.Create <ConnectionEdge>(this)
            .ConfigureTableStorage <ConnectionEdge>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.SourceId)
            .BuildTableStorage()
            .Build();

            inputBuilderFactory.Create <Model7>(this)
            .ConfigureTableStorage <Model7>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model7 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model8>(this)
            .ConfigureTableStorage <Model8>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model8 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model9>(this)
            .ConfigureTableStorage <Model9>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model9 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model10>(this)
            .ConfigureTableStorage <Model10>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model10 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model11>(this)
            .ConfigureTableStorage <Model11>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model11 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model12>(this)
            .ConfigureTableStorage <Model12>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Field)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model12 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model13Parent>(this)
            .ConfigureTableStorage <Model13Parent>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.AccountId)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model13Parent have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model13Child>(this)
            .ConfigureTableStorage <Model13Child>()
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.AccountId)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model13Child have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();

            inputBuilderFactory.Create <Model14>(this)
            .ConfigureTableStorage <Model14>()
            .AddPrefix("Stg")
            .AddConnectionString(configuration["TableStorage:ConnectionString"])
            .AddPartition(x => x.Descr)
            .BuildTableStorage()
            .DeleteAll(() => new Status {
                Message = "All Model14 have been removed."
            })
            .DisableBatchCreate()                       // Note it would be hard to use batch create in this context. Use batchCreateOrUpdate instead.
            .Build();
        }