예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
 public CartRepository(DreamerDbContext dreamerDbContext, IEmailNotifierService emailNotifierService
                       , IShippingCostCalculatorService shippingCostCalculatorService, IInternalHangfireService internalHangfireService) : base(dreamerDbContext)
 {
     EmailNotifierService          = emailNotifierService;
     ShippingCostCalculatorService = shippingCostCalculatorService;
     InternalHangfireService       = internalHangfireService;
 }
예제 #5
0
 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);
     }
 }
예제 #6
0
        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);
            }
        }
예제 #8
0
 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);
     }
 }
예제 #9
0
        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);
            }
        }
예제 #10
0
 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;
 }
예제 #12
0
 public DreamerRepository(DreamerDbContext dreamerDbContext)
 {
     DreamerDbContext = dreamerDbContext;
 }
예제 #13
0
 public SecurityRepository(DreamerDbContext dreamerDbContext) : base(dreamerDbContext)
 {
 }
예제 #14
0
        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);
            }
        }
예제 #15
0
 public SeedingRepository(DreamerDbContext dreamerDbContext) : base(dreamerDbContext)
 {
 }
 public ProductsRepository(DreamerDbContext dreamerDbContext) : base(dreamerDbContext)
 {
 }