Exemple #1
0
        public ActionResult Create([FromBody] OrderRequest orderData)
        {
            if (orderData == null)
            {
                return(BadRequest("Input request is empty"));
            }

            #region validate data

            try
            {
                var dataRequestValidator = new OrderRequestValidator();

                var validationResult = dataRequestValidator.Validate(orderData);

                if (!validationResult.IsValid)
                {
                    string errorMessage = "";

                    foreach (var error in validationResult.Errors)
                    {
                        errorMessage += error.ErrorMessage + " ";
                    }

                    return(Conflict(errorMessage));
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"Create new orders. Input data failed validation. Full validator exception message: {e.Message}");
                return(StatusCode(StatusCodes.Status500InternalServerError, "Internal server error"));
            }

            #endregion



            ServiceResult result = _userOrderService.SaveOrder(orderData);

            if (result.ResultConnection != ServiceResult.ResultConnectionEnum.Correct)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, result.Message));
            }

            return(StatusCode(StatusCodes.Status201Created));
        }
 public OrderRequestValidatorTest()
 {
     testObject = new OrderRequestValidator();
 }
Exemple #3
0
        public async Task <IActionResult> Create([FromBody] OrderRequestDto payload)
        {
            TextInfo caseFormat = new CultureInfo("en-US", false).TextInfo;

            var accountId = UserHelper.GetAccountId(User);

            if (payload == null)
            {
                ModelState.AddModelError("order", "The order cannot be blank");
                return(BadRequest(Responses.ErrorResponse <PaymentRequest>(ModelState.ToErrors(), StatusMessage.ValidationErrors, ResponseCodes.VALIDATION_ERRORS)));
            }

            //call a function that assigns the customer, branch and employee from an order to the payment if empty on the payment
            payload = setCustomerDataOnPayment(payload);

            var payment = payload?.Payment;

            if (payment == null)
            {
                ModelState.AddModelError("payment", "There is no payment attached to the order");
                return(BadRequest(Responses.ErrorResponse <PaymentRequest>(ModelState.ToErrors(), StatusMessage.ValidationErrors, ResponseCodes.VALIDATION_ERRORS)));
            }

            var paymentValidator = new PaymentRequestValidator(_paymentTypeConfiguration);

            paymentValidator.Validate(payment).AddToModelState(ModelState, null);
            if (!ModelState.IsValid)
            {
                return(BadRequest(Responses.ErrorResponse <PaymentRequest>(ModelState.ToErrors(), StatusMessage.ValidationErrors, ResponseCodes.VALIDATION_ERRORS)));
            }

            var orderValidator = new OrderRequestValidator();

            orderValidator.Validate(payload).AddToModelState(ModelState, null);
            if (!ModelState.IsValid)
            {
                return(BadRequest(Responses.ErrorResponse <PaymentRequest>(ModelState.ToErrors(), StatusMessage.ValidationErrors, ResponseCodes.VALIDATION_ERRORS)));
            }

            var orderRequest = _mapper.Map <OrderRequest>(payload);

            var paymentRequest = _mapper.Map <PaymentRequest>(payment);

            paymentRequest.OrderRequestDoc = JsonConvert.SerializeObject(orderRequest);
            paymentRequest = await _paymentRequestRepository.AddAsync(paymentRequest).ConfigureAwait(false);

            var paymentTypeClassName = $"Hubtel.PaymentProxy.Services.{caseFormat.ToTitleCase(payment.PaymentType.ToLower())}PaymentService";
            var paymentService       = (PaymentService)ActivatorUtilities.CreateInstance(_provider, Type.GetType(paymentTypeClassName));
            //-->
            var processPaymentResult = await paymentService.ProcessPayment(paymentRequest).ConfigureAwait(false);

            if (processPaymentResult.Success)
            {
                processPaymentResult.Data.OrderRequestDoc = null;
                return(Ok(processPaymentResult));
            }
            await _paymentRequestRepository.DeleteByClientReferenceAsync(paymentRequest.ClientReference).ConfigureAwait(false);

            processPaymentResult.Data = null;
            return(BadRequest(processPaymentResult));
        }