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)); } }
public IEnumerable <User> GetAllUsers() { using (PromoRepository db = new PromoRepository()) { return(db.Users.ToList()); } }
public void GetPromoTwoShouldReturnProperPromo() { // Arrange PromoRepository promoRepo = new PromoRepository(); // Act Promo promoTwo = promoRepo.GetPromoTwo(); // Assert Assert.True(IsTestPromoTwo(promoTwo)); }
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); } }
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); }
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); }
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 }
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); } }
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); }
public PromoController(IConfiguration config) { _promos = new PromoRepository(config); }