public IActionResult EditSquad([FromBody] EditSquadForDto model) { if (ModelState.IsValid) { var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value; if (userId != null) { return(Ok(_gameService.EditSquadAsync(model, userId).Result)); } return(BadRequest()); } return(BadRequest("Some properties are not valid.")); }
//public async Task<GameManagerResponse> AutoSquadAsync(AutoSquadForDto model, string userId) //{ // if (model.Capacity % 2 != 0) // { // return new GameManagerResponse { Message = "Capacity must be an even number", IsSuccess = false }; // } // await using (_context) // { // var game = await _context.Games.FindAsync(model.GameId); // var userClaim = await _context.UserClaims.SingleOrDefaultAsync(u => // u.UserId == userId && u.ClaimType == game.GroupId && u.ClaimValue == "Admin"); // if (userClaim == null || game == null) // return new GameManagerResponse // { // Message = "Game was not found or 403 forbidden.", // IsSuccess = false // }; // var groups = new List<Group>(); // for (var i = 0; i < model.GroupId.Count; i++) // { // groups.AddRange(_context.Groups.Where(g => g.Id == model.GroupId[i])); // } // var groupUsers = new List<IdentityUserClaim<string>>(); // foreach (var group in groups) // { // groupUsers.AddRange(_context.UserClaims.Where(u => u.ClaimType == group.Id)); // } // var players = new List<User>(); // foreach (var user in groupUsers) // { // if (players.Any(p => p.Id == user.UserId)) // { // continue; // } // players.Add(await _context.Users.FirstOrDefaultAsync(u => u.Id == user.UserId)); // } // var userRating = rating.GroupBy(g => g.Id).Select(g => new // { // g.Key, // Rating = g.Average(r => r.Rating), // Position = g.Select(r => r.Position).ToList() // }).OrderByDescending(o => o.Rating).ToList(); // var oldSquad = _context.GamePlayers.Where(p => p.GameId == model.GameId).ToList(); // _context.RemoveRange(oldSquad); // var squad = new List<GamePlayer>(); // for (var i = 0; i < model.Capacity; i++) // GELİŞTİR // { // var player = userRating[i]; // var result = player.Position.GroupBy(p => p).OrderBy(g => g.Count()).Select(g => g.Key).ToList(); // var mostFrequent = result.Last(); // squad.Add(new GamePlayer // { // UserId = player.Key, // GameId = model.GameId, // Team = ((i % 2) + 1).ToString(), // Position = mostFrequent // }); // } // await _context.AddRangeAsync(squad); // await _context.SaveChangesAsync(); // return new GameManagerResponse { Message = "Automatic squad created.", IsSuccess = true }; // } //} public async Task <GameManagerResponse> EditSquadAsync(EditSquadForDto model, string userId) { await using (_context) { var oldSquad = _context.GamePlayers.Where(p => p.GameId == model.GameId).ToList(); if (oldSquad.Any()) { _context.RemoveRange(oldSquad); } var squad = new List <GamePlayer>(); var users = model.Team1Users.ToList(); var positions = model.Team1Positions.ToList(); users.AddRange(model.Team2Users); positions.AddRange(model.Team2Positions); var team = 1; for (var i = 0; i < model.Team1Positions.Count + model.Team2Positions.Count; i++) { if (i == model.Team1Positions.Count) { team = 2; } squad.Add(new GamePlayer { UserId = users[i], Position = positions[i], GameId = model.GameId, Team = team.ToString(), InviteResponse = oldSquad.Find(x => x.UserId == users[i])?.InviteResponse }); } await _context.AddRangeAsync(squad); await _context.SaveChangesAsync(); return(new GameManagerResponse { Message = "Kadro düzenlendi.", IsSuccess = true }); } }