public async Task <object> ProcessAction(object value) { var payment = value as Model.Payment ?? throw new ArgumentNullException(value.GetType().ToString(), "The value is not implemented."); _log.LogInformation($"[Started] Payment process for Payment: {payment.PaymentId} - User: {payment.UserId}"); var mapper = MapperModelFactory <Model.Payment, payment_gateway_repository.Model.Payment> .GetMapper(); var model = mapper.MapToDestination(payment); var validator = await _validationService.ProcessValidation(_validator, model); var result = validator as Result; if (result?.StatusCode == StatusCode.Failed) { _log.LogError(result.ErrorCode.ConvertToInt(), GetMessage(result, model)); return(result); } //Process the bank payment result = new ProcessPayment(_bankProcessor, model).Process(); if (result?.StatusCode == StatusCode.Failed) { _log.LogError(result.ErrorCode.ConvertToInt(), GetMessage(result, model)); return(result); } //Save the transaction in DB var saved = await _repository.AddItemAsync(model); result = new NoSavedToStorage(saved, "Payment").Process(); if (result?.StatusCode == StatusCode.Failed) { _log.LogCritical(result.ErrorCode.ConvertToInt(), GetMessage(result, model)); return(result); } _log.LogInformation($"[Finished] Payment process for Payment: {payment.PaymentId} - User: {payment.UserId}"); return(model); }