Ejemplo n.º 1
0
        public TournamentType(ITournamentCategoryRepository tournamentCategoryRepository,
                              IBracketRepository bracketRepository,
                              IUserRepository userRepository)
        {
            Name        = "Tournament";
            Description = "Represents a tournament.";

            Field(_ => _.ID).Name("id").Description("The tournament ID.");
            Field(_ => _.Name).Name("name").Description("The tournament name.");

            Field <TournamentCategoryType>(
                "category",
                Description = "The tournament's category.",
                resolve: context => {
                var parent = context.Source;
                return(tournamentCategoryRepository.GetTournamentCategoryByID(parent.CategoryID));
            });

            Field <ListGraphType <BracketType> >(
                "brackets",
                Description = "Kategoriye ait urunler",
                resolve: context => {
                var parent = context.Source;
                return(bracketRepository.GetBrackets(_ => _.TournamentID == parent.ID));
            });

            Field <UserType>(
                "admin",
                Description = "Kategoriye ait urunler",
                resolve: context => {
                var parent = context.Source;
                return(userRepository.GetUserByID(parent.AdministratorID));
            });
        }
Ejemplo n.º 2
0
        private Score UpdateScore(int scoreId, int newValue,
                                  IScoreRepository scoreRepository,
                                  IBracketRepository bracketRepository,
                                  ITeamRepository teamRepository)
        {
            var score   = scoreRepository.GetScoreByID(scoreId);
            var bracket = bracketRepository.GetBracketByID(score.BracketID);

            if (!bracket.Finished && newValue >= 0)
            {
                score.Value = newValue;
                scoreRepository.UpdateScore(score);
            }

            ConnectionHub.SendToAll(UPDATE);

            var scores = (List <Score>)scoreRepository.GetScores(_ => _.BracketID == score.BracketID);
            var score1 = scores[0];
            var score2 = scores[1];
            var team   = teamRepository.GetTeamByID(score.TeamID);
            var team1  = teamRepository.GetTeamByID(score1.TeamID);
            var team2  = teamRepository.GetTeamByID(score2.TeamID);

            var body = string.Format("{0} ({1}) - ({2}) {3}", team1.Name, score1.Value, score2.Value, team2.Name);

            var notification = new Notification()
            {
                Title  = string.Format("{0} scored!", team.Name),
                Body   = body,
                Params = { bracket.TournamentID.ToString() }
            };

            PushHub.Send(notification);

            return(score);
        }
Ejemplo n.º 3
0
        private Bracket UpdateBracket(Bracket bracket, bool finished,
                                      int bracketId,
                                      IBracketRepository bracketRepository,
                                      IScoreRepository scoreRepository,
                                      ITeamRepository teamRepository)
        {
            if (!bracket.Finished)
            {
                bracket.Finished = finished;
                bracketRepository.UpdateBracket(bracket);
            }
            var brackets    = (List <Bracket>)bracketRepository.GetBrackets(_ => _.TournamentID == bracket.TournamentID);
            var notFinished = brackets.Where(b => b.Finished == false).ToList();

            if (brackets.Any() && !notFinished.Any())
            {
                var lowestLevel = brackets.OrderBy(b => b.Level).First().Level;
                if (lowestLevel > 0)
                {
                    var filteredBrackets = brackets.Where(b => b.Level == lowestLevel).ToList();
                    for (var index = 0; index + 1 < filteredBrackets.Count; index += 2)
                    {
                        var newBracket = new Bracket()
                        {
                            Level        = lowestLevel - 1,
                            Finished     = false,
                            TournamentID = bracket.TournamentID
                        };
                        var createdBracket = bracketRepository.InsertBracket(newBracket);

                        var bracketA        = filteredBrackets[index];
                        var bracketB        = filteredBrackets[index + 1];
                        var winnerAID       = FindWinnerID(bracketA.ID, scoreRepository);
                        var winnerBID       = FindWinnerID(bracketB.ID, scoreRepository);
                        var winnerIDs       = new int[] { winnerAID, winnerBID };
                        var teamsPerBracket = 2;
                        for (var x = 0; x < teamsPerBracket; x++)
                        {
                            var newScore = new Score()
                            {
                                BracketID = createdBracket.ID,
                                TeamID    = winnerIDs[x],
                                Value     = 0
                            };
                            scoreRepository.InsertScore(newScore);
                        }
                    }
                }
            }

            ConnectionHub.SendToAll(UPDATE);

            var scores = (List <Score>)scoreRepository.GetScores(_ => _.BracketID == bracketId);
            var score1 = scores[0];
            var score2 = scores[1];
            var team1  = teamRepository.GetTeamByID(score1.TeamID);
            var team2  = teamRepository.GetTeamByID(score2.TeamID);

            var body = string.Format("{0} ({1}) - ({2}) {3}", team1.Name, score1.Value, score2.Value, team2.Name);

            var notification = new Notification()
            {
                Title  = "A bracket was finished!",
                Body   = body,
                Params = { bracket.TournamentID.ToString() }
            };

            PushHub.Send(notification);

            return(bracket);
        }
Ejemplo n.º 4
0
        public ChallengerMutation(ITournamentRepository tournamentRepository,
                                  ITeamRepository teamRepository,
                                  IBracketRepository bracketRepository,
                                  IScoreRepository scoreRepository,
                                  IUserRepository userRepository)
        {
            Field <TournamentType>(
                "createTournament",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <TournamentInputType> > {
                Name = "tournament"
            },
                    new QueryArgument <NonNullGraphType <ListGraphType <TeamInputType> > > {
                Name = "teams"
            },
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "categoryId"
            },
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "userId"
            }),
                resolve: context =>
            {
                var tournament = context.GetArgument <Tournament>("tournament");
                var teamsNames = context.GetArgument <Team[]>("teams");
                var categoryId = context.GetArgument <int>("categoryId");
                var userId     = context.GetArgument <int>("userId");
                return(CreateTournament(tournamentRepository,
                                        teamRepository, bracketRepository, scoreRepository,
                                        tournament, teamsNames, categoryId, userId));
            });
            Field <ScoreType>(
                "updateScore",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            },
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "value"
            }),
                resolve: context =>
            {
                var scoreId  = context.GetArgument <int>("id");
                var newValue = context.GetArgument <int>("value");
                return(UpdateScore(scoreId, newValue, scoreRepository,
                                   bracketRepository, teamRepository));
            });
            Field <BracketType>(
                "updateBracket",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            },
                    new QueryArgument <NonNullGraphType <BooleanGraphType> > {
                Name = "finished"
            }),
                resolve: context =>
            {
                var bracketId = context.GetArgument <int>("id");
                var finished  = context.GetArgument <bool>("finished");
                var bracket   = bracketRepository.GetBracketByID(bracketId);
                return(UpdateBracket(bracket, finished, bracketId,
                                     bracketRepository, scoreRepository, teamRepository));
            });
            Field <UserType>(
                "signup",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "name"
            },
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "password"
            }),
                resolve: context =>
            {
                var name     = context.GetArgument <string>("name");
                var password = context.GetArgument <string>("password");
                var user     = new User {
                    Name = name, Password = password
                };
                var createdUser = userRepository.InsertUser(user);
                return(createdUser);
            });

            Field <UserType>(
                "login",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "name"
            },
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "password"
            }),
                resolve: context =>
            {
                var name     = context.GetArgument <string>("name");
                var password = context.GetArgument <string>("password");
                return(userRepository.GetUsers(_ => _.Name == name && _.Password == password).First());
            });
        }
Ejemplo n.º 5
0
        private Tournament CreateTournament(
            ITournamentRepository tournamentRepository,
            ITeamRepository teamRepository,
            IBracketRepository bracketRepository,
            IScoreRepository scoreRepository,
            Tournament tournament,
            Team[] teamsNames,
            int categoryId,
            int userId
            )
        {
            tournament.CategoryID      = categoryId;
            tournament.AdministratorID = userId;
            var createdTournament = tournamentRepository.InsertTournament(tournament);

            var initialLevel = (int)Math.Log2(teamsNames.Length) - 1;

            for (int i = 0; i + 1 < teamsNames.Length; i += 2)
            {
                var team1 = new Team
                {
                    Name = teamsNames[i].Name
                };
                var team2 = new Team
                {
                    Name = teamsNames[i + 1].Name
                };
                var createdTeam1 = teamRepository.InsertTeam(team1);
                var createdTeam2 = teamRepository.InsertTeam(team2);
                if (i % 2 == 0)
                {
                    var bracket = new Bracket
                    {
                        Level      = initialLevel,
                        Finished   = false,
                        Tournament = createdTournament
                    };
                    var createdBracket = bracketRepository.InsertBracket(bracket);
                    var score1         = new Score
                    {
                        Value   = 0,
                        Team    = createdTeam1,
                        Bracket = createdBracket
                    };
                    var score2 = new Score
                    {
                        Value   = 0,
                        Team    = createdTeam2,
                        Bracket = createdBracket
                    };
                    scoreRepository.InsertScore(score1);
                    scoreRepository.InsertScore(score2);
                }
            }

            ConnectionHub.SendToAll(UPDATE);

            var notification = new Notification()
            {
                Title  = "New tournament created!",
                Body   = createdTournament.Name,
                Params = { createdTournament.ID.ToString() }
            };

            PushHub.Send(notification);

            return(createdTournament);
        }