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.")); }
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 }); } }