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(); }
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(); }
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 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 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"; // 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();; }
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(); } }
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(); }
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-- }
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(); }
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 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(); }
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(); }
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(); }
public PagingBooksMutation(InputBuilderFactory inputBuilderFactory, IConfiguration configuration) { Name = "mutations"; inputBuilderFactory.Create <Book>(this).ConfigureInMemory <Book>().BuildInMemory().Build(); }