Пример #1
0
        public ApiResult <Card> Payment(SearchCardOptions options)
        {
            if (options == null)
            {
                return(ReturnResult(ApiResultCode.BadRequest, $"Null {nameof(options)}"));
            }

            if (!string.IsNullOrWhiteSpace(options.CardNumber))
            {
                var card = GetByCardNumber(options.CardNumber);
                if (card == null)
                {
                    return(ReturnResult(ApiResultCode.NotFound, $"Card Number {options.CardNumber} was not found"));
                }

                var expirationMonth = card.Expiration.Month.ToString();
                var requestMonth    = FixMonth(options.ExpirationMonth);
                var expirationYear  = card.Expiration.Year.ToString();

                if (!expirationMonth.Equals(requestMonth) || !expirationYear.Equals(options.ExpirationYear))
                {
                    return(ReturnResult(ApiResultCode.Conflict, $"Card's Expiration Month or Year are wrong"));
                }

                if (!card.Active)
                {
                    return(ReturnResult(ApiResultCode.BadRequest, $"Card {options.CardNumber} is not active!"));
                }

                return(CheckAndUpdateAccount(options, card));
            }
            return(null);
        }
Пример #2
0
 public IActionResult Index(SearchCardOptions options)
 {
     return(View(
                new SearchCardViewModel()
     {
     }));
 }
Пример #3
0
        public IActionResult Payment([FromBody] SearchCardOptions options)
        {
            var result = _cards.Payment(options);

            if (!result.IsSuccessful())
            {
                return(result.ToActionResult());
            }
            return(Ok(options));
        }
Пример #4
0
        private ApiResult <Card> CheckAndUpdateAccount(SearchCardOptions options, Card card)
        {
            var accountBalance = card.Accounts.SingleOrDefault().Balance;

            if (accountBalance >= options.Amount)
            {
                accountBalance -= options.Amount;

                var result = UpdateAccount(card.Accounts.SingleOrDefault().AccountId, accountBalance);

                if (!result)
                {
                    return(ReturnResult(ApiResultCode.Conflict, $"Balance is lower than the requested amount!"));
                }
            }
            return(ApiResult <Card> .UpdateSuccessful(card));
        }
Пример #5
0
        public void Card_Payment_Success()
        {
            var options = new SearchCardOptions()
            {
                CardNumber      = "5351420084404288",
                ExpirationMonth = "04",
                ExpirationYear  = "2023",
                Amount          = 50
            };

            var result = _cards.Payment(options);

            Assert.True(result.IsSuccessful());
            Assert.NotNull(result.Data);

            var card = result.Data;

            Assert.Equal(options.CardNumber, card.CardNumber);
            Assert.True(card.Active);
        }
Пример #6
0
 public SearchCardViewModel()
 {
     Cards         = new List <Card>();
     SearchOptions = new SearchCardOptions();
 }