public DreamerUserDto AddNewUser(string email, string password, string name, DreamerUserRoles role) { try { if (DreamerDbContext.DreamerUsers.Any(user => user.Email == email)) { return(null); } if (!email.IsValidEmail()) { return(null); } var userSet = new DreamerUserSet { Email = email, Password = password.ToSHA256(), Name = name, Role = role }; DreamerDbContext.DreamerUsers.Add(userSet); DreamerDbContext.SaveChanges(); return(new DreamerUserDto { Id = userSet.Id, Email = userSet.Email, Name = userSet.Name, Role = userSet.Role }); } catch (Exception ex) { Log.Error(ex.Message); return(null); } }
public bool SaveProductToCart(Guid productId, Guid userId, int quantity) { try { Expression <Func <CartItemSet, bool> > filterCartItem = ci => ci.IsValid && ci.DreamerUserId == userId && ci.ProductId == productId; if (DreamerDbContext.CartItems.Any(filterCartItem)) { var cartItemSet = DreamerDbContext.CartItems.First(filterCartItem); cartItemSet.Quantity = quantity; } else { DreamerDbContext.CartItems.Add(new CartItemSet { DreamerUserId = userId, ProductId = productId, Quantity = quantity }); } DreamerDbContext.SaveChanges(); return(true); } catch (Exception ex) { Log.Error(ex.Message); return(false); } }
public DreamerUserDto Login(string email, string password) { try { var hashedPassword = password.ToSHA256(); var userSet = DreamerDbContext.DreamerUsers.Where(user => user.Email == email && user.Password == hashedPassword).SingleOrDefault(); if (userSet == null) { return(null); } userSet.LastActivityDate = DateTimeOffset.UtcNow; DreamerDbContext.SaveChanges(); return(new DreamerUserDto() { Id = userSet.Id, Name = userSet.Name, Email = userSet.Email, Role = userSet.Role }); } catch (Exception ex) { Log.Error(ex.Message); return(null); } }
public CartRepository(DreamerDbContext dreamerDbContext, IEmailNotifierService emailNotifierService , IShippingCostCalculatorService shippingCostCalculatorService, IInternalHangfireService internalHangfireService) : base(dreamerDbContext) { EmailNotifierService = emailNotifierService; ShippingCostCalculatorService = shippingCostCalculatorService; InternalHangfireService = internalHangfireService; }
public void UpdateLastActivity(Guid userId) { try { var userSet = new DreamerUserSet { Id = userId, LastActivityDate = DateTimeOffset.UtcNow }; DreamerDbContext.Entry(userSet).Property(user => user.LastActivityDate).IsModified = true; DreamerDbContext.SaveChanges(); } catch (Exception ex) { Log.Error(ex.Message); } }
public bool Seed() { if (!Clear()) { return(false); } try { List <CategorySet> categories = new List <CategorySet>(); for (int i = 0; i <= 10; i++) { categories.Add(new CategorySet { Name = RandomString() }); } DreamerDbContext.Categories.AddRange(categories); DreamerDbContext.SaveChanges(); List <ProductSet> products = new List <ProductSet>(); for (int i = 0; i <= 100; i++) { products.Add(new ProductSet { Name = RandomString(), Price = GetRandomNumber(), ProductCategories = categories.GetRange(GetRandomNumber(0, 9), 2).Select(c => new ProductCategorySet { CategoryId = c.Id }).ToList() }); } DreamerDbContext.Products.AddRange(products); DreamerDbContext.SaveChanges(); DreamerDbContext.DreamerUsers.Add(new Models.Security.DreamerUserSet { Email = "*****@*****.**", Password = "******".ToSHA256(), Name = "Admin", Role = Models.Enums.DreamerUserRoles.Administrator }); DreamerDbContext.DreamerUsers.Add(new Models.Security.DreamerUserSet { Email = "*****@*****.**", Password = "******".ToSHA256(), Name = "Customer", Role = Models.Enums.DreamerUserRoles.Customer }); DreamerDbContext.SaveChanges(); return(true); } catch (Exception ex) { Log.Error(ex.Message); return(false); } }
public void MarkOrderAsShipped(Guid orderId) { try { var orderSet = DreamerDbContext.Orders.Include(order => order.OrderShipment).Include(order => order.DreamerUser).Where(order => order.Id == orderId).First(); orderSet.Status = Models.Enums.OrderStatus.Shipped; orderSet.OrderShipment.ShippedTime = DateTimeOffset.UtcNow; DreamerDbContext.SaveChanges(); EmailNotifierService.SendShippedSuccessfully(orderSet.DreamerUser.Email, orderSet.SerialNumber); } catch (Exception ex) { Log.Error(ex.Message); } }
public bool ClearCart(Guid userId) { try { foreach (var Id in DreamerDbContext.CartItems.Where(ci => ci.DreamerUserId == userId).Select(ci => ci.Id)) { //Soft delete without calling the item, modify one column var cartItem = new CartItemSet { Id = Id, IsValid = false }; DreamerDbContext.Entry(cartItem).Property(ci => ci.IsValid).IsModified = true; } DreamerDbContext.SaveChanges(); return(true); } catch (Exception ex) { Log.Error(ex.Message); return(false); } }
public bool MarkOrderAsDelivered(Guid orderId) { try { var orderSet = DreamerDbContext.Orders.Include(order => order.OrderShipment).Include(order => order.DreamerUser).Where(order => order.Id == orderId && order.IsValid).FirstOrDefault(); if (orderSet == null || orderSet.Status == Models.Enums.OrderStatus.Delivered) { return(false); } orderSet.Status = Models.Enums.OrderStatus.Delivered; orderSet.OrderShipment.DeliveryTime = DateTimeOffset.UtcNow; DreamerDbContext.SaveChanges(); EmailNotifierService.SendDeliveredSuccessfully(orderSet.DreamerUser.Email, orderSet.SerialNumber); return(true); } catch (Exception ex) { Log.Error(ex.Message); return(false); } }
public bool DeleteProductFromCart(Guid productId, Guid userId) { try { var cartItemSet = DreamerDbContext.CartItems.FirstOrDefault(ci => ci.IsValid && ci.DreamerUserId == userId && ci.ProductId == productId); if (cartItemSet != null) { cartItemSet.IsValid = false; DreamerDbContext.SaveChanges(); return(true); } else { return(false); } } catch (Exception ex) { Log.Error(ex.Message); return(false); } }
public InternalHangfireService(DreamerDbContext dreamerDbContext, IEmailNotifierService emailNotifierService) { DreamerDbContext = dreamerDbContext; EmailNotifierService = emailNotifierService; }
public DreamerRepository(DreamerDbContext dreamerDbContext) { DreamerDbContext = dreamerDbContext; }
public SecurityRepository(DreamerDbContext dreamerDbContext) : base(dreamerDbContext) { }
public DetailedOrderDto CheckOutCart(Guid userId, string address) { try { OrderSet orderSet; var orderProducts = new List <OrderProductSet>(); var ShipmentToAddressCost = ShippingCostCalculatorService.Calculate(address); //Moving the user cart to new "PAID" order var userCart = DreamerDbContext.CartItems.Where(ci => ci.IsValid && ci.DreamerUserId == userId).Include(ci => ci.Product).AsEnumerable(); if (!userCart.Any()) { return(null); } foreach (var item in userCart) { var orderProductSet = new OrderProductSet { ProductId = item.ProductId, DiscountPercentage = item.Product.DiscountPercentage, OneItemPrice = item.Product.Price, Quantity = item.Quantity, DiscountValue = item.Product.Price * item.Quantity * item.Product.DiscountPercentage / 100 }; orderProductSet.NetPrice = (orderProductSet.OneItemPrice * orderProductSet.Quantity) - orderProductSet.DiscountValue; orderProducts.Add(orderProductSet); } orderSet = new OrderSet { PaymentDateTime = DateTimeOffset.UtcNow, DreamerUserId = userId, Status = Models.Enums.OrderStatus.Paid, NetItemsPrice = orderProducts.Sum(op => op.NetPrice), NetItemsDiscountValue = orderProducts.Sum(op => op.DiscountValue), OrderProducts = orderProducts, OrderShipment = new OrderShipmentSet { Address = address, ShipmentCost = ShipmentToAddressCost }, FreeDelivery = userCart.Any(ci => ci.Product.FreeDelivary) }; //One free-shipping product in the card is enough to make the whole card shipment for free if (orderSet.FreeDelivery) { orderSet.OrderShipment.ShipmentCost = 0; } else { orderSet.OrderShipment.ShipmentCost = ShipmentToAddressCost; } //Calculating the total for the order orderSet.Total = orderSet.NetItemsPrice + orderSet.OrderShipment.ShipmentCost; DreamerDbContext.Orders.Add(orderSet); DreamerDbContext.SaveChanges(); //Clearing the cart ClearCart(userId); //Send email notification var userEmail = DreamerDbContext.DreamerUsers.Where(user => user.Id == userId).Select(c => c.Email).Single(); if (EmailNotifierService.SendPaidSuccessfully(userEmail, orderSet)) { orderSet.EmailNotified = true; DreamerDbContext.SaveChanges(); } //Set as shipped the next day InternalHangfireService.EnqueueMarkOrderAsShipped(orderSet.Id); return(GetOrderDetails(orderSet.Id)); } catch (Exception ex) { Log.Error(ex.Message); return(null); } }
public SeedingRepository(DreamerDbContext dreamerDbContext) : base(dreamerDbContext) { }
public ProductsRepository(DreamerDbContext dreamerDbContext) : base(dreamerDbContext) { }