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); }
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); }
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); } }
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); }