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);
 }
示例#2
0
        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;
            }
        }
示例#3
0
 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);
 }
示例#4
0
        public async Task <string> Create([FromBody] User user)
        {
            ServiceContract.RequireNotNull(user, nameof(user));
            ServiceContract.RequireValidated(user, nameof(user));

            return(await _persistance.CreateAsync(user));
        }
示例#5
0
        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));
 }
示例#7
0
        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);
        }
示例#10
0
        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);
        }
示例#17
0
 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}.");
     }
 }
示例#18
0
        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}.");
            }
        }