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())); }
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); }