Esempio n. 1
0
        public IHttpActionResult RateList(RatingShortDescriptionTO addRating)
        {
            if (ModelState.IsValid)
            {
                string identityUserName = System.Web.HttpContext.Current.User.Identity.Name;
                addRating.UserName = identityUserName;

                var userId = _authService.GetUserId(identityUserName);
                if (userId == null || userId == "")
                {
                    logger.Log(LogLevel.Error, "Error during rating list: " + identityUserName + " doesn't exists!");
                    return(BadRequest(UserENUM.USER_NOT_FOUND.ToString()));
                }

                var list = _listService.CheckIfListExists(addRating.ListId);

                if (list == false)
                {
                    logger.Log(LogLevel.Error, "Error during rating list - List with id: " + addRating.ListId + " doesn't exists!");
                    return(BadRequest(ListENUM.LIST_NOT_FOUND.ToString()));
                }

                var rating = _listService.GetRating(addRating.ListId, identityUserName);

                if (rating != null)
                {
                    if (rating.Rate != addRating.Rate)
                    {
                        addRating.UserName = identityUserName;
                        bool updateRate = _listService.UpdateRate(addRating);

                        if (!updateRate)
                        {
                            logger.Log(LogLevel.Error, "Unable to update rating for list id: " + addRating.ListId + " and userName: "******".\n");
                            return(BadRequest(RateENUM.UNABLE_UPDATE_RATE.ToString()));
                        }

                        return(StatusCode(HttpStatusCode.Created));
                    }
                    else if (rating.Rate == addRating.Rate)
                    {
                        bool deleteRate = _listService.DeleteRating(addRating);

                        if (!deleteRate)
                        {
                            logger.Log(LogLevel.Error, "Unable to delete rating for list id: " + addRating.ListId + " and userName: "******".\n");
                            return(BadRequest(RateENUM.UNABLE_DELETE_RATE.ToString()));
                        }
                    }
                }
                else
                {
                    var addRatingResult = _listService.AddRating(addRating.ListId, addRating.Rate, userId);

                    if (!addRatingResult)
                    {
                        logger.Log(LogLevel.Error, "Unable to add rating with list id: " + addRating.ListId + " and userName: "******".\n");
                        return(BadRequest(RateENUM.UNABLE_ADD_RATE.ToString()));
                    }

                    logger.Log(LogLevel.Info, "Rating with list id: " + addRating.ListId + " and userName: "******" was added.\n");
                    return(StatusCode(HttpStatusCode.Created));
                }
            }

            return(BadRequest(RateENUM.UNABLE_ADD_RATE.ToString()));
        }
Esempio n. 2
0
        public bool UpdateRate(RatingShortDescriptionTO rating)
        {
            var success = false;

            if (rating.Rate == -1 || rating.Rate == 1)
            {
                using (var scope = new TransactionScope())
                {
                    var rate = new Rating();

                    var cache = ApplicationCache <Rating> .GetCache();

                    if (cache.Count() > 0)
                    {
                        var cacheItem = cache.Where(d => d.List.Id == rating.ListId && d.User.UserName == rating.UserName).FirstOrDefault();

                        if (cacheItem != null)
                        {
                            rate = cacheItem;
                        }
                        else
                        {
                            rate = _listRepository.GetRating(rating.ListId, rating.UserName);
                        }
                    }
                    else
                    {
                        rate = _listRepository.GetRating(rating.ListId, rating.UserName);
                    }


                    if (rate != null)
                    {
                        //remove old rating cache item
                        ApplicationCache <Rating> .RemoveCacheItem(rate);

                        rate.Rate = rating.Rate;
                        // add updated rating to cache
                        ApplicationCache <Rating> .AddCacheItem(rate);

                        //update cache in db
                        _listRepository.UpdateRate(rating.ListId, rating.UserName, rating.Rate);
                        scope.Complete();
                    }
                }

                using (var scope = new TransactionScope())
                {
                    _listRepository.UpdateLikesDislikesCount(rating.ListId, false, false, true);

                    //update cache ListDescriptionTO
                    var cache = ApplicationCache <ListDescriptionTO> .GetCache();

                    if (cache.Count() > 0)
                    {
                        var cacheItem = cache.FirstOrDefault(d => d.Id == rating.ListId);
                        if (cacheItem != null)
                        {
                            //update likes
                            cacheItem.Likes = _listRepository.GetLikesCount(rating.ListId);
                            //update dislikes
                            cacheItem.DisLikes = _listRepository.GetDislikesCount(rating.ListId);
                            var listIndex = cache.FindIndex(d => d.Id == rating.ListId);
                            // replace object
                            cache[listIndex] = cacheItem;

                            ApplicationCache <ListDescriptionTO> .FillCache(cache);
                        }
                    }

                    scope.Complete();
                    success = true;
                }
            }
            return(success);
        }