示例#1
0
        public async Task <IActionResult> GetByPaymentsFilter(
            [Required][RowKey] string merchantId,
            IEnumerable <string> statuses,
            IEnumerable <string> processingErrors,
            DateTime?dateFrom,
            DateTime?dateTo,
            [Range(1, int.MaxValue)] int?take
            )
        {
            var statusesConverted = new List <PaymentRequestStatus>();

            if (statuses != null)
            {
                foreach (var status in statuses)
                {
                    try
                    {
                        statusesConverted.Add(status.Trim().ParseEnum <PaymentRequestStatus>());
                    }
                    catch (Exception)
                    {
                        return(BadRequest(ErrorResponse.Create(
                                              $"PaymentRequestStatus <{status}> is not valid. " +
                                              $"Valid values are: {string.Join(",", Enum.GetNames(typeof(PaymentRequestStatus)))}")));
                    }
                }
            }

            var processingErrorsConverted = new List <PaymentRequestProcessingError>();

            if (processingErrors != null)
            {
                foreach (var processingError in processingErrors)
                {
                    try
                    {
                        processingErrorsConverted.Add(processingError.Trim().ParseEnum <PaymentRequestProcessingError>());
                    }
                    catch (Exception)
                    {
                        return(BadRequest(ErrorResponse.Create(
                                              $"PaymentRequestProcessingError <{processingError}> is not valid. " +
                                              $"Valid values are: {string.Join(",", Enum.GetNames(typeof(PaymentRequestProcessingError)))}")));
                    }
                }
            }

            var paymentRequests = await _paymentRequestService.GetByFilterAsync(new PaymentsFilter
            {
                MerchantId       = merchantId,
                Statuses         = statusesConverted,
                ProcessingErrors = processingErrorsConverted,
                DateFrom         = dateFrom,
                DateTo           = dateTo
            });

            var result = new GetByPaymentsFilterResponse();

            if (take.HasValue)
            {
                result.HasMorePaymentRequests = paymentRequests.Count > take.Value;
                paymentRequests = paymentRequests.OrderByDescending(x => x.Timestamp).Take(take.Value).ToList();
            }
            else
            {
                paymentRequests = paymentRequests.OrderByDescending(x => x.Timestamp).ToList();
            }

            result.PaymeentRequests = paymentRequests;

            return(Ok(result));
        }