Exemple #1
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 #2
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);
            }
        }