Ejemplo n.º 1
0
        public async Task <IEnumerable <UnpaidResponseOutput> > HandleUnpaidResponseAsync(IEnumerable <UnpaidResponseInput> unpaidResponseInputs, CancellationToken cancellationToken)
        {
            if (unpaidResponseInputs == null)
            {
                _logger.LogError((int)LoggingEvents.ValidationFailed, "UnpaidEngine.HandleUnpaidResponseAsync - unpaidResponseInputs is null");
                return(null);
            }

            var responseInputList = unpaidResponseInputs.ToList();

            if (!responseInputList.Any())
            {
                _logger.LogError((int)LoggingEvents.ValidationFailed, "UnpaidEngine.HandleUnpaidResponseAsync - unpaidResponseInputs is empty");
                return(null);
            }

            var unpaidResponseOutputList = new List <UnpaidResponseOutput>();

            foreach (var unpaidResponseInput in responseInputList)
            {
                var unpaidResonseOutput = new UnpaidResponseOutput
                {
                    PolicyNumber   = unpaidResponseInput.PolicyNumber,
                    IdNumber       = unpaidResponseInput.IdNumber,
                    Accepted       = unpaidResponseInput.Accepted,
                    ContactOption  = unpaidResponseInput.ContactOption,
                    HttpStatusCode = HttpStatusCode.NotFound,
                    ErrorMessage   = "Notification not found."
                };

                var unpaidRequest = await _unpaidRequestClient.GetUnpaidRequestByIdAsync(unpaidResponseInput, cancellationToken);

                if (unpaidRequest == null)
                {
                    _logger.LogWarning((int)LoggingEvents.GetItem, "UnpaidEngine.HandleUnpaidResponseAsync - _unpaidRequestClient.GetUnpaidRequestByIdAsync returned null", new { CorrelationId = unpaidResponseInput.CorrelationId });
                    unpaidResponseOutputList.Add(unpaidResonseOutput);
                    continue;
                }

                // Check if already exists.
                var unpaidResponse = await _unpaidResponseClient.GetUnpaidResponseAsync(unpaidRequest.UnpaidRequestId, cancellationToken);

                if (unpaidResponse != null && unpaidResponse.Any())
                {
                    _logger.LogWarning((int)LoggingEvents.GetItem, "UnpaidEngine.HandleUnpaidResponseAsync - _unpaidResponseClient.GetUnpaidResponseAsync returned null or empty. Possible cause could be notification response already exists.", new { CorrelationId = unpaidResponseInput.CorrelationId });
                    unpaidResonseOutput.HttpStatusCode = HttpStatusCode.AlreadyReported;
                    unpaidResonseOutput.ErrorMessage   = "Notification response already exists.";
                    unpaidResponseOutputList.Add(unpaidResonseOutput);
                    continue;
                }

                var addUnpaidResponseResult = await _unpaidResponseClient.AddPendingUnpaidResponseAsync(unpaidResponseInput, unpaidRequest.UnpaidRequestId, cancellationToken);

                if (addUnpaidResponseResult <= 0)
                {
                    _logger.LogWarning((int)LoggingEvents.InsertItem, "UnpaidEngine.HandleUnpaidResponseAsync - _unpaidResponseClient.AddPendingUnpaidResponseAsync returned no rows", new { CorrelationId = unpaidResponseInput.CorrelationId });
                    unpaidResonseOutput.HttpStatusCode = HttpStatusCode.InternalServerError;
                    unpaidResonseOutput.ErrorMessage   = "Error adding notification response.";
                    unpaidResponseOutputList.Add(unpaidResonseOutput);
                    continue;
                }

                unpaidResonseOutput.HttpStatusCode = HttpStatusCode.Accepted;
                unpaidResonseOutput.ErrorMessage   = string.Empty;
                unpaidResponseOutputList.Add(unpaidResonseOutput);
            }

            return(unpaidResponseOutputList);
        }