Пример #1
0
        public async Task CreateOrUpdatePlayersRating(PlayersRatingViewModel model, PlayersRating entity)
        {
            using (var db = new ApplicationDbContext())
                using (var transaction = db.Database.BeginTransaction())
                {
                    await Task.Run(() =>
                    {
                        var playersRating = db.PlayersRatings.SingleOrDefault(x => x.ReviewerId == model.ReviewerId && x.RatedId == model.RatedId);

                        // Add or update rating
                        if (playersRating == null)
                        {
                            db.PlayersRatings.Add(entity);
                        }
                        else
                        {
                            playersRating.Rating = model.Rating;
                        }

                        db.SaveChanges();

                        // Update players overall rating
                        var ratedPlayer        = db.Users.SingleOrDefault(x => x.Id == model.RatedId);
                        var ratedPlayerRatings = db.PlayersRatings.Where(x => x.RatedId == model.RatedId).ToList();

                        int counter = 0, ratingSum = 0;
                        foreach (var item in ratedPlayerRatings)
                        {
                            var ratingInt = (int)item.Rating;
                            if (ratingInt == 0)
                            {
                                continue;
                            }

                            counter++;
                            ratingSum += ratingInt;
                        }

                        ratedPlayer.OverallRating = ratingSum / (double)counter;

                        db.SaveChanges();
                        transaction.Commit();
                    });
                }
        }
        public async Task <IHttpActionResult> CreateOrUpdatePlayersRating(PlayersRatingViewModel model, string userID = null)
        {
            string appUserID = (userID == null) ? User.Identity.GetUserId() : userID;

            model.ReviewerId = appUserID;

            try
            {
                var playersRating = _mapperToEntity.Map <PlayersRating>(model);
                await _playerRatingsService.CreateOrUpdatePlayersRating(model, playersRating);

                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }