Пример #1
0
        public void Post(CreateNewRoundRequest request)
        {
            var currentFinalDayCompetition = Db.SingleById <FinalDayCompetition>(request.FinalDayCompetitionId);
            var competitionMode            = CompetitionModeFactory.GetCompetitionMode(Db, currentFinalDayCompetition.CompetitionMode);

            var generatedMatches = competitionMode.GenerateMatches(request.FinalDayCompetitionId);

            Db.SaveAll(generatedMatches);
        }
Пример #2
0
        private void CreateFinalDayMatches(int finalDayCompetitionId)
        {
            var currentFinalDayCompetition = Db.SingleById <FinalDayCompetition>(finalDayCompetitionId);
            var competitionMode            = CompetitionModeFactory.GetCompetitionMode(Db, currentFinalDayCompetition.CompetitionMode);

            var generatedMatches = competitionMode.GenerateMatches(finalDayCompetitionId);

            Db.SaveAll(generatedMatches);

            competitionMode.AfterMatchSafe(generatedMatches, finalDayCompetitionId);
        }
Пример #3
0
        public static void MatchResultChanged(Match match, IDbConnection dbConnection)
        {
            var competitionMode  = CompetitionModeFactory.GetCompetitionMode(dbConnection, match);
            var upcommingMatches = competitionMode.GenerateMatchAfterMatchResultEntered(match);

            upcommingMatches.ForEach(x => dbConnection.Insert(x));

            // TODO SSH: Ist das hier am richtigen Ort?
            if (dbConnection.Count <MatchView>(x => x.FinalDayCompetitionId == match.FinalDayCompetitionId && x.HomeTeamScore == null) == 0 && competitionMode.ShouldFinishCompetitionWhenNoMoreMatchesOpen())
            {
                var finalDayCompetition = dbConnection.SingleById <FinalDayCompetition>(match.FinalDayCompetitionId);
                finalDayCompetition.State = FinalDayCompetitionState.Finished;
                dbConnection.Save(finalDayCompetition);
            }
            else
            {
                // TODO SSH: Immer auf running updaten ist eigentlich blöd
                var finalDayCompetition = dbConnection.SingleById <FinalDayCompetition>(match.FinalDayCompetitionId);
                finalDayCompetition.State = FinalDayCompetitionState.Running;
                dbConnection.Save(finalDayCompetition);
            }
        }
Пример #4
0
        private FinalDayCompetitionProgressDto GetProgressForCompetition(FinalDayCompetition finalDayCompetition)
        {
            var competitionMode = CompetitionModeFactory.GetCompetitionMode(Db, finalDayCompetition.CompetitionMode);

            var progress = new FinalDayCompetitionProgressDto
            {
                CompetitionState = finalDayCompetition.State,
                CompetitionName  = finalDayCompetition.Name,
                CompetitionId    = finalDayCompetition.Id,
                CompetitionMode  = finalDayCompetition.CompetitionMode,
                MatchesRunning   = Db.Count(Db.From <MatchView>().Where(x => x.FinalDayCompetitionId == finalDayCompetition.Id && x.PlayDate != null && x.ResultDate == null)),
            };

            var finishedMatches = Db.Select(Db.From <MatchView>().Where(x => x.FinalDayCompetitionId == finalDayCompetition.Id && ((x.PlayDate != null && x.ResultDate != null) || x.IsFreeTicket)));

            progress.MatchesPlayed = finishedMatches.Count;
            progress.MatchesOpen   = competitionMode.GetNumberOfMatches(finalDayCompetition.Id) - progress.MatchesPlayed - progress.MatchesRunning;

            var playedMatches = finishedMatches.Where(x => !x.IsFreeTicket).ToList();

            if (playedMatches.Any())
            {
                progress.AverageMatchDuration = (int)TimeSpan.FromSeconds(playedMatches.Average(x => (x.ResultDate - x.PlayDate).Value.TotalSeconds)).TotalMinutes;

                long numberOfTables = GetNumberOfTablesForFinalDayCompetition(finalDayCompetition.Id);
                if (numberOfTables != 0)
                {
                    double totalDurationInMinutes = progress.AverageMatchDuration * progress.MatchesOpen / numberOfTables;
                    var    competitionDuration    = TimeSpan.FromMinutes(totalDurationInMinutes);

                    progress.ExpectedEnd = DateTime.Now + competitionDuration;
                }
            }

            return(progress);
        }