public ActionResult EditReview(ReviewVM model)
        {
            _tagsManager     = TagsManagerFactory.Create();
            _reviewManager   = ReviewManagerFactory.Create();
            _categoryManager = CategoryManagerFactory.Create();

            if (ModelState.IsValid)
            {
                try
                {
                    //set dates
                    model.Review.DateCreated = DateTime.Now;

                    //send review to manager
                    _reviewManager.EditReview(model.Review);

                    if (model.NewTags != null)
                    {
                        //create array of tags from tags input
                        string[] tags = model.NewTags.Split(',');

                        //send tags to tag manager
                        TResponse <List <Tags> > tagList = _tagsManager.AddListOfTags(tags);

                        //add tags to review
                        _reviewManager.AddTagsToReview(model.Review.ReviewId, tagList.Payload);
                    }

                    return(RedirectToAction("Index"));
                }
                catch (Exception ex)
                {
                    //catch an exception and add

                    throw new ApplicationException("Something wrong happened while adding a review:", ex);
                }
            }
            else
            {
                //reset view
                var tagsResponse = _tagsManager.GetTagByReviewId(model.Review.ReviewId);
                model.TagList = tagsResponse.Payload;
                TResponse <List <Categories> > response = _categoryManager.GetCategoryList();
                model.SetCategoryListItems(response.Payload);
                return(View(model));
            }
        }
        public ActionResult AddReview(Review review)
        {
            AccessToken accessToken = ((AccessToken)Session["AccessToken"]);

            Rental rental = rentalManager.GetRentalByCustomerID(accessToken.User.CustomerID, review.ISBN);

            review.RentalID = rental.RentalID;

            if (ModelState.IsValid)
            {
                if (reviewManager.CheckReview(accessToken.User.CustomerID, review.ISBN))
                {
                    reviewManager.EditReview(review);
                }
                else
                {
                    reviewManager.AddReview(review);
                }

                return(RedirectToAction("Reviews", "Reviews", new { review.ISBN }));
            }

            return(View());
        }
        public ActionResult EditReview(ReviewVM model)
        {
            _tagsManager     = TagsManagerFactory.Create();
            _reviewManager   = ReviewManagerFactory.Create();
            _categoryManager = CategoryManagerFactory.Create();

            if (ModelState.IsValid)
            {
                try
                {
                    //set dates
                    model.Review.DateCreated = DateTime.Now;

                    //send review to manager
                    _reviewManager.EditReview(model.Review);

                    if (model.NewTags != null)
                    {
                        //create array of tags from tags input
                        string[] tags = model.NewTags.Split(',');

                        //send tags to tag manager
                        var newlyAddedTagsResponse = _tagsManager.AddListOfTags(tags);

                        //get current tags
                        var currentTagsForReviewResponse = _tagsManager.GetTagsByReviewId(model.Review.ReviewId);

                        //add tags to review
                        _tagsManager.EditTagsForReview(model.Review.ReviewId,
                                                       newlyAddedTagsResponse.Payload,
                                                       currentTagsForReviewResponse.Payload);

                        return(RedirectToAction("Reviews"));
                    }
                    else
                    {
                        var response = _tagsManager.DeleteAllTagsForReview(model.Review.ReviewId);

                        if (!response.Success)
                        {
                            return(new HttpStatusCodeResult(500, $"Error in cloud. Message: {response.Message}"));
                        }

                        return(RedirectToAction("Reviews"));
                    }
                }
                catch (Exception ex)
                {
                    //catch an exception and add

                    throw new ApplicationException("Something wrong happened while adding a review:", ex);
                }
            }
            else
            {
                //reset view
                var tagsResponse = _tagsManager.GetTagByReviewId(model.Review.ReviewId);
                model.TagList = tagsResponse.Payload;
                TResponse <List <Categories> > response = _categoryManager.GetCategoryList();
                model.SetCategoryListItems(response.Payload);

                return(View(model));
            }
        }