Exemplo n.º 1
0
 public User GetUser(Guid userId)
 {
     using (PromoRepository db = new PromoRepository())
     {
         return(db.Users.FirstOrDefault(_user => _user.Id == userId));
     }
 }
 public IEnumerable <PromoCode> GetAllPromos()
 {
     using (PromoRepository db = new PromoRepository())
     {
         return(db.PromoCodes.ToList());
     }
 }
 public Product GetProduct(Guid productId)
 {
     using (PromoRepository db = new PromoRepository())
     {
         return(db.Products.FirstOrDefault(_prod => _prod.Id == productId));
     }
 }
Exemplo n.º 4
0
 public IEnumerable <User> GetAllUsers()
 {
     using (PromoRepository db = new PromoRepository())
     {
         return(db.Users.ToList());
     }
 }
Exemplo n.º 5
0
        public void GetPromoTwoShouldReturnProperPromo()
        {
            //  Arrange
            PromoRepository promoRepo = new PromoRepository();

            //  Act
            Promo promoTwo = promoRepo.GetPromoTwo();

            //  Assert
            Assert.True(IsTestPromoTwo(promoTwo));
        }
Exemplo n.º 6
0
        public Cart GetUserCart(Guid userId)
        {
            using (PromoRepository db = new PromoRepository())
            {
                Cart userCart = db.Carts
                                .Include(_cart => _cart.User)
                                .FirstOrDefault(_cart => _cart.User.Id == userId);

                userCart.Products   = db.CartProducts.Include(cp => cp.Product).Where(cp => cp.CartId == userCart.Id).Select(cp => cp.Product).ToList();
                userCart.PromoCodes = db.CartPromos.Include(cp => cp.PromoCode).Where(cp => cp.CartId == userCart.Id).Select(cp => cp.PromoCode).ToList();

                return(userCart);
            }
        }
Exemplo n.º 7
0
        public App()
        {
            InitializeComponent();

            UserRepository.GetInstance();
            PromoRepository.GetInstance();
            CategoryRepository.GetInstance();
            ShoppingCardRepository.GetInstance();
            CityRepository.GetInstance();
            AddressRepository.GetInstance();
            FurnitureRepository.GetInstance();

            MainPage = new MainPage();
        }
        public PromoCode SavePromo(PromoCode promo)
        {
            using (PromoRepository db = new PromoRepository())
            {
                if (promo.Id == Guid.Empty)
                {
                    db.PromoCodes.Add(promo);
                }
                else
                {
                    db.PromoCodes.Attach(promo);
                    db.Entry(promo).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                }
                db.SaveChanges();
            }

            return(promo);
        }
Exemplo n.º 9
0
        public User SaveUser(User user)
        {
            using (PromoRepository db = new PromoRepository())
            {
                if (user.Id == Guid.Empty)
                {
                    db.Users.Add(user);
                }
                else
                {
                    db.Users.Attach(user);
                    db.Entry(user).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                }
                db.SaveChanges();
            }

            return(user);
        }
Exemplo n.º 10
0
        public void CheckCalculateCalculateCostsCalculatesCorrectly(int buttersQty, int milksQty, int breadsQty, decimal finalCost)
        {
            //  Arrange
            IPromoRepository   promoRepository   = new PromoRepository();
            IProductRepository productRepository = new ProductRepository();
            List <IPromo>      testPromosList    = new List <IPromo>()
            {
                promoRepository.GetPromoOne(), promoRepository.GetPromoTwo()
            };
            List <IProduct>  testProductsList = productRepository.GetProducts(buttersQty, milksQty, breadsQty);
            IGroceriesBasket basket           = new GroceriesBasket();

            basket.AddProducts(testProductsList);
            ICostCalculator costCalculator = new CostCalculator(basket, testPromosList);

            //  Act
            costCalculator.CalculateCosts();

            //  Assert that all the involved Costs are as they should be
            Assert.Equal(testProductsList.Sum(product => product.Price), costCalculator.TotalCost);                                 //  Total Cost of the Items
            Assert.Equal(testPromosList.Sum(promo => promo.CalculateDeduction(testProductsList)), costCalculator.PromosDeductions); //  Total Deductions from the applied Promos
            Assert.Equal(finalCost, costCalculator.FinalCost);                                                                      //  Final Cost
        }
Exemplo n.º 11
0
        public Cart RedeemPromo(string code, Cart cart)
        {
            using (PromoRepository db = new PromoRepository())
            {
                var dbPromo = db.PromoCodes.Include(_promo => _promo.Product).FirstOrDefault(_dbPromo => _dbPromo.Code == code);

                if (dbPromo != null)
                {
                    DateTime now = DateTime.UtcNow;
                    if (now < dbPromo.StartDate)
                    {
                        cart.PromoErrors.Add(new PromoError()
                        {
                            ErrorCode = PromoErrorType.NotStarted,
                            Message   = $"Promo starts on {dbPromo.StartDate}"
                        });
                    }
                    if (dbPromo.EndDate < now)
                    {
                        cart.PromoErrors.Add(new PromoError()
                        {
                            ErrorCode = PromoErrorType.Expired,
                            Message   = $"Promo expired"
                        });
                    }
                    if (dbPromo.RedemptionCount >= dbPromo.MaxRedemptionCount)
                    {
                        cart.PromoErrors.Add(new PromoError()
                        {
                            ErrorCode = PromoErrorType.MaxRedemptions,
                            Message   = $"Promo expired"
                        });
                    }

                    if (cart.Products.Select(_product => _product.Id).Contains(dbPromo.Id) == false)
                    {
                        cart.PromoErrors.Add(new PromoError()
                        {
                            ErrorCode = PromoErrorType.NoRelatedProduct,
                            Message   = "Promo does not apply to any items in the cart"
                        });
                    }

                    dbPromo.RedemptionCount += 1;
                    db.SaveChanges();

                    // apply promo
                    cart.PromoCodes.Add(dbPromo);
                }
                else
                {
                    cart.PromoErrors.Add(new PromoError()
                    {
                        ErrorCode = PromoErrorType.InvalidPromo,
                        Message   = $"Promo {code} doesn't exist"
                    });
                }

                return(cart);
            }
        }
Exemplo n.º 12
0
        public Cart SaveCart(Cart cart)
        {
            using (PromoRepository db = new PromoRepository())
            {
                var productCache = cart.Products.ToList();
                var promoCache   = cart.PromoCodes.ToList();
                cart.Products   = new List <Product>();
                cart.PromoCodes = new List <PromoCode>();

                if (cart.User.Id == Guid.Empty)
                {
                    db.Users.Add(cart.User);
                }
                else
                {
                    db.Users.Attach(cart.User);
                    db.Entry(cart.User).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                }


                if (cart.Id == Guid.Empty)
                {
                    db.Carts.Add(cart);
                }
                else
                {
                    db.Carts.Attach(cart);
                    db.Entry(cart).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                }

                db.SaveChanges();

                var existingProductRelations = db.CartProducts.Where(cp => cp.CartId == cart.Id);
                var existingProductIds       = existingProductRelations.Select(cp => cp.ProductId);
                var requestedProductIds      = productCache.Select(product => product.Id);

                var toAddProductIds    = requestedProductIds.Except(existingProductIds);
                var toRemoveProductIds = existingProductIds.Except(requestedProductIds);

                var toAddCartProductModels = toAddProductIds.Select(productId => new CartProduct()
                {
                    CartId = cart.Id, ProductId = productId
                });
                db.CartProducts.AddRange(toAddCartProductModels);

                foreach (var toRemoveId in toRemoveProductIds)
                {
                    db.CartProducts.Remove(db.CartProducts.First(cp => cp.CartId == cart.Id && cp.ProductId == toRemoveId));
                }

                var existingPromoRelations = db.CartPromos.Where(cp => cp.CartId == cart.Id);
                var existingPromoIds       = existingPromoRelations.Select(cp => cp.PromoCodeId);
                var requestedPromoIds      = promoCache.Select(product => product.Id);

                var toAddPromoIds    = requestedPromoIds.Except(existingPromoIds);
                var toRemovePromoIds = existingPromoIds.Except(requestedPromoIds);

                var toAddCartPromoModels = toAddPromoIds.Select(promoId => new CartPromo()
                {
                    CartId = cart.Id, PromoCodeId = promoId
                });
                db.CartPromos.AddRange(toAddCartPromoModels);

                foreach (var toRemoveId in toRemoveProductIds)
                {
                    db.CartPromos.Remove(db.CartPromos.First(cp => cp.CartId == cart.Id && cp.PromoCodeId == toRemoveId));
                }

                db.SaveChanges();
                cart.Products   = productCache;
                cart.PromoCodes = promoCache;
            }

            return(cart);
        }
Exemplo n.º 13
0
 public PromoController(IConfiguration config)
 {
     _promos = new PromoRepository(config);
 }