コード例 #1
0
        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."));
        }
コード例 #2
0
        //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
                });
            }
        }