Esempio n. 1
0
        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);
        }