Exemple #1
0
        public static IEnumerable <CharacterDto> Query(int userId)
        {
            using (var db = new ClanRePlannerContext())
            {
                var characters = db.Characters.Select(x =>
                                                      new CharacterDto(x.CharacterId, x.Name, x.MinStars, x.MaxStars)
                                                      ).ToList();

                var userCharacters = db.UserCharacters.Where(x => x.UserId == userId)
                                     .Include(x => x.Character)
                                     .Include(x => x.User).ToList();
                if (userCharacters.Any())
                {
                    var userCharacterDto = userCharacters.Select(x =>
                                                                 new CharacterDto(x.CharacterId, x.Character.Name, x.Character.MinStars, x.Character.MaxStars)
                    {
                        UserCharacterId = x.UserCharacterId,
                        CurrentStars    = x.Stars,
                        Selected        = true,
                        UserName        = x.User.Username,
                    }
                                                                 );

                    var tempCharacters = userCharacterDto.Intersect(characters, new CharacterDtoIdComparer()).
                                         Concat(characters.Except(userCharacterDto, new CharacterDtoIdComparer()));

                    characters = tempCharacters.ToList();
                }

                return(characters.OrderBy(x => x.Name).ToList());
            }
        }
Exemple #2
0
        public static UserTeamCharactersDto Query(int userId)
        {
            using (var db = new ClanRePlannerContext())
            {
                var user = db.Users.SingleOrDefault(x => x.UserId == userId);
                if (user == null)
                {
                    throw new InvalidOperationException($"User with the ID: {userId} was not found.");
                }

                var userTeamCharacters = db.UserTeamCharacter
                                         .Where(x => x.UserId == userId)
                                         .Include(x => x.User)
                                         .Include(x => x.UserCharacter.Character)
                                         .Include(x => x.UserCharacter.User)
                                         .ToList();

                if (!userTeamCharacters.Any())
                {
                    return(new UserTeamCharactersDto()
                    {
                        UserName = user.Username,
                    });
                }

                var userTeamCharactersDto = new UserTeamCharactersDto
                {
                    UserName = user.Username,
                };

                foreach (var team in userTeamCharactersDto.Teams)
                {
                    team.Team.AddRange(userTeamCharacters
                                       .Where(x => x.TeamTypeId == (int)team.TeamType)
                                       .OrderBy(x => x.UserCharacter.Character.SortOrder)
                                       .Select(x => new TeamCharacterDto
                    {
                        UserCharacterId = x.UserCharacterId,
                        CharacterName   = x.UserCharacter.Character.Name,
                        UserName        = x.UserCharacter.User.Username,
                        IsSupportUnit   = x.UserCharacter.UserId != x.UserId,
                        Stars           = x.UserCharacter.Stars,
                    }).ToList());
                }

                return(userTeamCharactersDto);
            }
        }
        public static IEnumerable <CharacterDto> Query(int userId)
        {
            using (var db = new ClanRePlannerContext())
            {
                var clanId = db.Users.Single(x => x.UserId == userId).ClanId;

                var availableSupportCharacters = db.Users.Where(x => x.ClanId == clanId && x.UserId != userId)
                                                 .SelectMany(x => x.UserCharacters)
                                                 .Select(x => new CharacterDto(x.CharacterId, x.Character.Name, x.Character.MinStars, x.Character.MaxStars)
                {
                    UserCharacterId = x.UserCharacterId,
                    CurrentStars    = x.Stars,
                    UserName        = x.User.Username,
                });

                return(availableSupportCharacters.OrderByDescending(x => x.CurrentStars).ToList());
            }
        }
Exemple #4
0
        //TODO - Remove same character id from same team
        public static HttpStatusCode Command(int userId, Models.Enums.TeamType teamType, int newUserCharacterId, int?oldUserCharacterId)
        {
            using (var db = new ClanRePlannerContext())
            {
                var teams = db.UserTeamCharacter.Where(x => x.UserId == userId);

                //Remove old character from your team
                if (oldUserCharacterId.HasValue)
                {
                    var userTeamCharacterToRemove = teams.Single(x => x.TeamTypeId == (int)teamType && x.UserCharacterId == oldUserCharacterId);
                    db.UserTeamCharacter.Remove(userTeamCharacterToRemove);

                    //Remove borrowed character from other teams using it if support
                    if (teamType == Models.Enums.TeamType.Support)
                    {
                        var userTeamCharactersToRemove = db.UserTeamCharacter.Where(x => x.UserCharacterId == oldUserCharacterId.Value).ToList();

                        if (userTeamCharactersToRemove.Any())
                        {
                            db.UserTeamCharacter.RemoveRange(userTeamCharactersToRemove);
                        }
                    }
                }

                //If you're adding a unit that exists in the same team, do nothing
                var existsInSameTeam = teams.Any(x => x.UserCharacterId == newUserCharacterId && x.TeamTypeId == (int)teamType);
                if (existsInSameTeam)
                {
                    return(HttpStatusCode.OK);
                }

                //If you're adding a unit to a normal team, remove the unit from other teams
                if (teamType != Models.Enums.TeamType.Support)
                {
                    var unitToRemoveFromOtherTeam = teams
                                                    .SingleOrDefault(x => x.UserCharacterId == newUserCharacterId &&
                                                                     x.TeamTypeId != (int)Models.Enums.TeamType.Support);

                    if (unitToRemoveFromOtherTeam != default(UserTeamCharacter))
                    {
                        db.UserTeamCharacter.Remove(unitToRemoveFromOtherTeam);
                    }
                }

                //If you're adding a unit to a team that contains the same character, remove the old unit
                var selectedCharacterId = db.UserCharacters.Single(x => x.UserCharacterId == newUserCharacterId).CharacterId;
                var matchingCharacter   = teams
                                          .SingleOrDefault(x => x.UserCharacter.CharacterId == selectedCharacterId &&
                                                           (int)teamType == x.TeamTypeId);
                if (matchingCharacter != default(UserTeamCharacter))
                {
                    db.UserTeamCharacter.Remove(matchingCharacter);
                }

                //Add unit to team
                var userTeamCharacterToAdd = new UserTeamCharacter()
                {
                    UserCharacterId = newUserCharacterId,
                    UserId          = userId,
                    TeamTypeId      = (int)teamType,
                };

                db.UserTeamCharacter.Add(userTeamCharacterToAdd);

                try
                {
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    return(HttpStatusCode.ServiceUnavailable);
                }

                return(HttpStatusCode.OK);
            }
        }
Exemple #5
0
        public static HttpStatusCode Command(int userId, SelectedCharacterDto[] selectedCharacters)
        {
            using (var db = new ClanRePlannerContext())
            {
                var userCharactersToUpdate = new List <UserCharacter>();
                var userCharactersToAdd    = new List <UserCharacter>();
                var userCharactersToDelete = new List <UserCharacter>();

                var oldUserCharacters = db.UserCharacters.Where(x => x.UserId == userId).ToList();

                var selectedUserCharacters = selectedCharacters.Select(x => new UserCharacter
                {
                    UserId      = userId,
                    CharacterId = x.CharacterId,
                    Stars       = x.Stars,
                });

                if (oldUserCharacters.Any())
                {
                    var matchedUserCharacters = oldUserCharacters
                                                .Intersect(selectedUserCharacters, new UserCharacterComparer()).ToList();

                    foreach (var matchedDbUserCharacter in matchedUserCharacters)
                    {
                        var newStarValue = selectedUserCharacters.Single(x => x.UserId == matchedDbUserCharacter.UserId &&
                                                                         x.CharacterId == matchedDbUserCharacter.CharacterId).Stars;
                        matchedDbUserCharacter.Stars = newStarValue;
                    }

                    userCharactersToUpdate = matchedUserCharacters;

                    userCharactersToAdd = selectedUserCharacters
                                          .Except(oldUserCharacters, new UserCharacterComparer()).ToList();

                    userCharactersToDelete = oldUserCharacters
                                             .Except(selectedUserCharacters, new UserCharacterComparer()).ToList();
                }
                else
                {
                    userCharactersToAdd = selectedUserCharacters.ToList();
                }

                if (userCharactersToUpdate.Any())
                {
                    db.UserCharacters.UpdateRange(userCharactersToUpdate);
                }

                if (userCharactersToAdd.Any())
                {
                    db.UserCharacters.AddRange(userCharactersToAdd);
                }

                if (userCharactersToDelete.Any())
                {
                    db.UserCharacters.RemoveRange(userCharactersToDelete);
                }

                try
                {
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    return(HttpStatusCode.ServiceUnavailable);
                }

                return(HttpStatusCode.OK);
            }
        }