Пример #1
0
        public async Task <ActionResult <RedeemCodeModel> > AddToBasket([FromBody] string redeemCode)
        {
            var basket = await _basketsRepository.ReadAsync();

            if (redeemCode != null)
            {
                var redeem = await _redeemCodesRepository.ReadAsync(redeemCode);


                if (redeem == null)
                {
                    var err = new RedeemCodeModel {
                        Id = "", Discount = 0, Error = "Redeem Code Not Found!: " + redeemCode
                    };
                    return(StatusCode(StatusCodes.Status404NotFound, err));
                }

                if (redeem.Used)
                {
                    string error = "";
                    if (basket.RedeemCode != null && basket.RedeemCode.id == redeem.id)
                    {
                        error = "Redeem Code Already Applied " + redeem.id;
                    }
                    else
                    {
                        error = "Redeem Code Already Used: " + redeem.id;
                    }

                    var err = new RedeemCodeModel {
                        Id = "", Discount = 0, Error = error
                    };
                    return(StatusCode(StatusCodes.Status404NotFound, err));
                }

                if (basket.RedeemCode == null)
                {
                    await _redeemCodesRepository.UseRedeenCode(redeemCode);

                    basket.RedeemCode = redeem;
                }
                else
                {
                    await _redeemCodesRepository.ReUseRedeenCode(basket.RedeemCode.id);

                    await _redeemCodesRepository.UseRedeenCode(redeemCode);

                    basket.RedeemCode = redeem;
                }
            }
            basket = await _basketsRepository.ReadAsync();

            return(new RedeemCodeModel {
                Id = basket.RedeemCode.id, Discount = basket.RedeemCode.Discount, Error = ""
            });
        }
Пример #2
0
        public async Task <ActionResult <Discount> > ApplyDiscount([FromBody] string discountText)
        {
            var discountModel = await _discountsRepository.ReadAsync(discountText);

            var basketModel = await _basketsRepository.ReadAsync();

            // error handling
            if (discountModel == null)
            {
                return(NotFound(new JsonResult("Discount doesn't exist.")));
            }
            if (discountModel.IsUsed)
            {
                return(BadRequest(new JsonResult("This discount has been used already.")));
            }
            if (basketModel.DiscountApplied)
            {
                return(BadRequest(new JsonResult("A discount has already been applied.")));
            }

            // set the discount and send to view for confirm
            await _discountsRepository.SetUsedAsync(discountModel.Name);

            await _basketsRepository.SetDiscount(discountModel.DiscountRate);

            discountModel = await _discountsRepository.ReadAsync(discountModel.Name);

            return(discountModel.ToDiscountViewModel());
        }
Пример #3
0
        public async Task <ActionResult <Basket> > GetBasket(string redeemCode)
        {
            var basket = await _basketsRepository.ReadAsync();

            if (redeemCode != null)
            {
                var redeem = await _redeemCodesRepository.ReadAsync(redeemCode);

                basket.RedeemCode = redeem;
            }

            return(basket.ToBasketViewModel());
        }
Пример #4
0
        public async Task <ActionResult <Order> > PlaceOrder()
        {
            var basket = await _basketsRepository.ReadAsync();

            var orderModel = basket.ToOrderModel();
            await _ordersRepository.SaveAsync(orderModel);

            await _basketsRepository.ResetBasketAsync();

            return(CreatedAtAction(
                       nameof(GetOrder),
                       new { orderModel.ID },
                       orderModel.ToOrderViewModel()));
        }
Пример #5
0
        public async Task <ActionResult <Basket> > GetBasket()
        {
            var basket = await _basketsRepository.ReadAsync();

            return(basket.ToBasketViewModel());
        }
Пример #6
0
        public async Task <Basket> ReadAsync()
        {
            var basket = await basketsRepository.ReadAsync();

            return(await calcEngineService.CalculateTotals(basket));
        }