public virtual async Task CreateWithSpecifiedIdAsync(string id, Invoice item, CancellationToken token = default(CancellationToken)) { ServiceContract.RequireNotNullOrWhiteSpace(id, nameof(id)); ServiceContract.RequireNotNull(item, nameof(item)); ServiceContract.RequireValidated(item, nameof(item)); await CrudController.CreateWithSpecifiedIdAsync(id, item, token); }
public static async Task DistributeCall(RawRequestEnvelope requestEnvelope, ILogger log) { try { InternalContract.RequireNotNull(Startup.AsyncCallerServiceConfiguration, nameof(Startup.AsyncCallerServiceConfiguration), $"Missing {nameof(Startup.AsyncCallerServiceConfiguration)}. Please check your Nexus configuration for this function app."); // Client tenant is found in the request envelope var clientTenant = new Tenant(requestEnvelope.Organization, requestEnvelope.Environment); ServiceContract.RequireValidated(clientTenant, nameof(clientTenant)); FulcrumApplication.Context.ClientTenant = clientTenant; // Setup the tenants AC configuration (cache and refresh is handled by LeverServiceConfiguration) var clientConfig = await Startup.AsyncCallerServiceConfiguration.GetConfigurationForAsync(clientTenant); FulcrumApplication.Context.LeverConfiguration = clientConfig; // Distribute the request. RequestHandler will put back on queue if necessary, and also handle callbacks var handler = new RequestHandler(HttpSender, clientTenant, FulcrumApplication.Context.LeverConfiguration, requestEnvelope); await handler.ProcessOneRequestAsync(); } catch (Exception e) { const string errorMessage = "Failed to distribute request. (Code location 5ADA0B3E-2344-4977-922B-F7BB870EA065)"; log.LogError(e, errorMessage); Log.LogError(errorMessage, e); throw; } }
public async Task Update(string id, User user) { ServiceContract.RequireNotNullOrWhitespace(id, nameof(id)); ServiceContract.RequireValidated(user, nameof(user)); //TODO: Tutorial 3 - Publish an event here await _persistance.UpdateAsync(user.Id, user); }
public async Task <string> Create([FromBody] User user) { ServiceContract.RequireNotNull(user, nameof(user)); ServiceContract.RequireValidated(user, nameof(user)); return(await _persistance.CreateAsync(user)); }
public async Task Update(string id, User user) { ServiceContract.RequireNotNullOrWhitespace(id, nameof(id)); ServiceContract.RequireValidated(user, nameof(user)); await _persistance.UpdateAsync(user.Id, user); }
public async Task <string> CreateAsync(Applicant item, CancellationToken token = new CancellationToken()) { ServiceContract.RequireNotNull(item, nameof(item)); ServiceContract.RequireValidated(item, nameof(item)); ServiceContract.Require(item.Id == null, $"The {nameof(item.Id)} field must be null."); return(await Capability.ApplicantService.CreateAsync(item, token)); }
public async Task <IHttpActionResult> LogAsync(LogInstanceInformation message) { ServiceContract.RequireNotNull(message, nameof(message)); ServiceContract.RequireValidated(message, nameof(message)); await FulcrumApplication.Setup.FullLogger.LogAsync(message); return(new StatusCodeResult(HttpStatusCode.Accepted, this)); }
public void IsValidatedOk() { var validatable = new Validatable { Name = "Jim" }; ServiceContract.RequireValidated(validatable, nameof(validatable)); }
public async Task <string> Create([FromBody] User user) { ServiceContract.RequireNotNull(user, nameof(user)); ServiceContract.RequireValidated(user, nameof(user)); var id = await _persistance.CreateAsync(user); throw new FulcrumNotImplementedException("Method /Users is not yet implemented - Part of tutorial 3"); return(id); }
public async Task <Location> GeocodeAsync(Address address) { ServiceContract.RequireNotNull(address, nameof(address)); ServiceContract.RequireValidated(address, nameof(address)); var location = await GeocodingFunctionality.GeocodeAsync(address); FulcrumAssert.IsNotNull(location, $"{Namespace}: 56B82634-89A6-4EE4-969D-B7FFB4F9C016"); FulcrumAssert.IsValidated(location, $"{Namespace}: 56B82634-89A6-4EE4-969D-B7FFB4F9C016"); return(location); }
public async Task <IPersonProfile> UpdateAsync(ServicePersonProfile item) { ServiceContract.RequireNotNull(item, nameof(item)); ServiceContract.RequireValidated(item, nameof(item)); var personProfile = await PersonProfilesFunctionality.UpdateAsync(item); FulcrumAssert.IsNotNull(personProfile, $"{Namespace}: 56B82634-89A6-4EE4-969D-B7FFB4F9C016"); FulcrumAssert.IsValidated(personProfile, $"{Namespace}: 56B82634-89A6-4EE4-969D-B7FFB4F9C016"); return(personProfile); }
public async Task <string> PostAsync(User user) { ServiceContract.RequireNotNull(user, nameof(user)); ServiceContract.RequireValidated(user, nameof(user)); await new BatchTranslate(_translateClient, "mobile-app", "customer-master") .Add("user.type", user.Type, translatedValue => user.Type = translatedValue) .ExecuteAsync(); return(await _customerMasterClient.AddUser(user)); }
public async Task <User> PutAsync(string id, User user) { ServiceContract.RequireNotNullOrWhitespace(id, nameof(id)); ServiceContract.RequireNotNull(user, nameof(user)); ServiceContract.RequireValidated(user, nameof(user)); await new BatchTranslate(_translateClient, "mobile-app", "customer-master") .Add("user.type", user.Type, translatedValue => user.Type = translatedValue) .ExecuteAsync(); throw new FulcrumNotImplementedException("Method PUT /Users/{id} is not yet implemented - Part of tutorial 1"); }
public async Task <HealthResponse> ServiceHealthAsync() { ServiceContract.RequireNotNull(_tenant, nameof(_tenant)); ServiceContract.RequireValidated(_tenant, nameof(_tenant)); var aggregator = new ResourceHealthAggregator(_tenant, "Api"); aggregator.AddHealthResponse(await CheckAuthentication()); aggregator.AddHealthResponse(await CheckLogging()); aggregator.AddHealthResponse(await CheckValueTranslation()); aggregator.AddHealthResponse(await CheckVisualNotificationCapability()); aggregator.AddHealthResponse(await CheckCustomerMasterCapability()); aggregator.AddHealthResponse(await CheckStatisticsCapability()); return(aggregator.GetAggregatedHealthResponse()); }
public async Task <Product> CreateProduct(Product product) { ServiceContract.RequireNotNull(product, nameof(product)); ServiceContract.RequireValidated(product, nameof(product)); var bllProduct = ToBll(product); bllProduct = await _productFunctionality.CreateAsync(bllProduct); var result = FromBll(bllProduct); FulcrumAssert.IsNotNull(result, nameof(result)); FulcrumAssert.IsValidated(result, $"{Namespace}: 41042A82-2D71-427F-BBBF-9CDC7545E590"); return(result); }
public async Task <Product> UpdateProduct(Product product) { ServiceContract.RequireNotNull(product, nameof(product)); ServiceContract.RequireValidated(product, nameof(product)); var bllProduct = ToBll(product); bllProduct = await _productFunctionality.Update(bllProduct); var result = FromBll(bllProduct); FulcrumAssert.IsNotNull(result, nameof(result)); FulcrumAssert.IsValidated(result, $"{Namespace}: 27A74E83-C31A-4A87-B8C6-1FE5A7FF9F85"); return(result); }
public void IsValidatedFail() { try { var validatable = new Validatable(); ServiceContract.RequireValidated(validatable, nameof(validatable)); Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail("An exception should have been thrown"); } catch (FulcrumServiceContractException fulcrumException) { Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(fulcrumException?.TechnicalMessage); Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(fulcrumException.TechnicalMessage.StartsWith("Validation failed")); Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(fulcrumException.TechnicalMessage.Contains("Property Name")); } catch (Exception e) { Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail($"Expected a specific FulcrumException but got {e.GetType().FullName}."); } }
public static async Task DistributeCall(RawRequestEnvelope requestEnvelope, ILogger log) { try { // Setup correlation id MaybeSetupCorrelationId(requestEnvelope, log); // Log this invocation var invocationLogMessage = $"{requestEnvelope}; prio: {requestEnvelope.RawRequest.Priority?.ToString() ?? "standard"}"; log.LogDebug(invocationLogMessage); Log.LogVerbose(invocationLogMessage); InternalContract.RequireNotNull(Startup.AsyncCallerServiceConfiguration, nameof(Startup.AsyncCallerServiceConfiguration), $"Missing {nameof(Startup.AsyncCallerServiceConfiguration)}. Please check your Nexus configuration for this function app."); // Client tenant is found in the request envelope var clientTenant = new Tenant(requestEnvelope.Organization, requestEnvelope.Environment); ServiceContract.RequireValidated(clientTenant, nameof(clientTenant)); FulcrumApplication.Context.ClientTenant = clientTenant; // Setup the tenants AC configuration (cache and refresh is handled by LeverServiceConfiguration) if (!Startup.AsyncCallerServiceConfiguration.TryGetValue(clientTenant, out var serviceConfiguration)) { throw new FulcrumUnauthorizedException($"Unable to find credentials for fetching Nexus configuration for tenant {clientTenant}"); } var clientConfig = await serviceConfiguration.GetConfigurationForAsync(clientTenant); FulcrumApplication.Context.LeverConfiguration = clientConfig; // Distribute the request. RequestHandler will put back on queue if necessary, and also handle callbacks var handler = new RequestHandler(HttpSender, clientTenant, FulcrumApplication.Context.LeverConfiguration, requestEnvelope); await handler.ProcessOneRequestAsync(); } catch (Exception e) { var errorMessage = "Failed to distribute request. (Code location 5ADA0B3E-2344-4977-922B-F7BB870EA065)" + $" | Loaded configurations: {string.Join(", ", Startup.AsyncCallerServiceConfiguration.Keys)}"; log.LogError(e, errorMessage); Log.LogError(errorMessage, e); throw; } }
public void IsValidatedFail() { try { var validatable = new Validatable(); ServiceContract.RequireValidated(validatable, nameof(validatable)); UT.Assert.Fail("An exception should have been thrown"); } catch (FulcrumServiceContractException fulcrumException) { UT.Assert.IsNotNull(fulcrumException.TechnicalMessage); var validationFailed = "ContractViolation: Validation failed"; UT.Assert.IsTrue(fulcrumException.TechnicalMessage.StartsWith(validationFailed), $"Expected {nameof(fulcrumException.TechnicalMessage)} to start with \"{validationFailed}\", but the message was \"{fulcrumException.TechnicalMessage}\"."); UT.Assert.IsTrue(fulcrumException.TechnicalMessage.Contains("Property Validatable.Name"), $"TechnicalMessage: '{fulcrumException.TechnicalMessage}'"); } catch (Exception e) { UT.Assert.Fail($"Expected a specific FulcrumException but got {e.GetType().FullName}."); } }