Example #1
0
        public IActionResult AddAvailabilityNotification([FromRoute] int productId, [FromRoute] string guestEmail = "")
        {
            var userId  = _userManager.GetUserId(User);
            var product = _productRepository.GetProductById(productId);

            if (String.IsNullOrEmpty(userId) && String.IsNullOrEmpty(guestEmail))
            {
                return(BadRequest("User not found & email not specified."));
            }

            if (product == null)
            {
                return(BadRequest("Product not found."));
            }

            if (product.IsAvailable)
            {
                return(BadRequest("Product is already available."));
            }

            ProductAvailabilityNotification notification;

            if (!String.IsNullOrEmpty(userId))
            {
                if (_productRepository.ProductNotificationExistsForUserId(productId, userId))
                {
                    return(BadRequest("Notification for user already exists."));
                }

                notification = new ProductAvailabilityNotification()
                {
                    CustomerId = userId,
                    ProductId  = productId
                };
            }
            else
            {
                if (!guestEmail.IsValidEmailAddress())
                {
                    return(BadRequest("Invalid email address."));
                }

                if (_productRepository.ProductNotifExistsForEmail(productId, guestEmail))
                {
                    return(BadRequest("Failed to create notification."));
                }

                notification = new ProductAvailabilityNotification()
                {
                    Email     = guestEmail,
                    ProductId = productId
                };
            }

            _productRepository.AddProductNotification(notification);
            _productRepository.SaveChanges();

            return(Ok());
        }
Example #2
0
 public void RemoveProductNotification(ProductAvailabilityNotification notification)
 {
     _context.ProductAvalabilityNotifications.Remove(notification);
 }
Example #3
0
 public void AddProductNotification(ProductAvailabilityNotification notification)
 {
     _context.ProductAvalabilityNotifications.Add(notification);
 }