Ejemplo n.º 1
0
        public IActionResult PlayerRating([FromBody] PlayerRatingForDto model)
        {
            if (ModelState.IsValid)
            {
                var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

                if (userId != null)
                {
                    return(Ok(_gameService.PlayerRatingAsync(model, userId).Result));
                }

                return(BadRequest());
            }
            return(BadRequest("Some properties are not valid."));
        }
Ejemplo n.º 2
0
        public async Task <GameManagerResponse> PlayerRatingAsync(PlayerRatingForDto model, string userId)
        {
            await using (_context)
            {
                if (model.Rating.Count != model.UserId.Count || model.Rating.Count == 0)
                {
                    return(new GameManagerResponse {
                        Message = "Eksik giriş. Lütfen kontrol ediniz.", IsSuccess = false
                    });
                }

                var game = await _context.Games.SingleOrDefaultAsync(g => g.Id == model.GameId);

                if (game.GameDate == null && game.GameDate > DateTime.Now)
                {
                    return(new GameManagerResponse {
                        Message = "Oyun oynanmadan oylama yapılamaz.", IsSuccess = false
                    });
                }

                var gamePlayer      = _context.GamePlayers.Where(u => u.GameId == model.GameId).ToList();
                var index           = 0;
                var currentUserTeam = gamePlayer.SingleOrDefault(p => p.UserId == userId)?.Team;

                if (_context.Ratings.Any(p => p.GameId == model.GameId && p.VoterUserId == userId))
                {
                    return(new GameManagerResponse {
                        Message = "Tekrar oy veremezsiniz.", IsSuccess = false
                    });
                }

                foreach (var rat in model.Rating)
                {
                    if (rat < 4 || rat > 10)
                    {
                        return(new GameManagerResponse {
                            Message = "Lütfen 4-10 aralığında puanlayınız.", IsSuccess = false
                        });
                    }
                }

                foreach (var playerId in model.UserId)
                {
                    if (playerId == userId)
                    {
                        index++;
                        continue;
                    }
                    var player = gamePlayer.FirstOrDefault(p => p.UserId == playerId);
                    if (player == null || currentUserTeam != player.Team)
                    {
                        continue;
                    }
                    var rating = new Rating {
                        UserId = playerId, VoterUserId = userId, GameId = model.GameId, RatingValue = model.Rating[index]
                    };
                    index++;
                    _context.Add(rating);
                    await _context.SaveChangesAsync();

                    var allRating = _context.Ratings.Where(x => x.GameId == model.GameId && x.UserId == playerId).Select(x => x.RatingValue).ToList();
                    var gameTemp  = _context.GamePlayers
                                    .SingleOrDefault(x => x.GameId == model.GameId && x.UserId == playerId);
                    if (gameTemp == null)
                    {
                        continue;
                    }
                    gameTemp.GameRating = allRating.Sum() / allRating.Count;
                    _context.Update(gameTemp);
                    await _context.SaveChangesAsync();

                    var user = await _context.Users.FindAsync(playerId);

                    user.OverAllRating = _context.GamePlayers.Where(x => x.UserId == playerId && x.GameRating != 0).Average(x => x.GameRating);
                    _context.Update(user);
                }

                await _context.SaveChangesAsync();

                return(new GameManagerResponse {
                    Message = "Oyuncular başarıyla oylandı.", IsSuccess = true
                });
            }
        }