public void BlueWon_WithWazaariAwasetteIppon() { ContestSheetData data = new ContestSheetData { WazaariBlue = 2, }; Assert.False(data.WhiteWon()); }
public void WhiteWon_WithWazaari() { ContestSheetData data = new ContestSheetData { WazaariWhite = 1, }; Assert.True(data.WhiteWon()); }
public void BlueWon_WithIppon() { ContestSheetData data = new ContestSheetData { IponBlue = 1, }; Assert.False(data.WhiteWon()); }
public void WhiteWon_WithWazaariAwasetteIppon() { ContestSheetData data = new ContestSheetData { WazaariWhite = 2, }; Assert.True(data.WhiteWon()); }
public void WhiteWon_WithIppon() { ContestSheetData data = new ContestSheetData { IponWhite = 1, }; Assert.True(data.WhiteWon()); }
public void WhiteWon_WithIpponAgainstWazaari() { ContestSheetData data = new ContestSheetData { IponWhite = 1, WazaariBlue = 1, }; Assert.True(data.WhiteWon()); }
public static int ScoreBlue(this ContestSheetData contest) { if (contest.IponBlue == 1 || contest.WazaariBlue == 2) { return(10); } if (contest.WazaariBlue == 1) { return(7); } return(0); }
public static ContestSheetDataDto ToDTO(this ContestSheetData contest) { return(new ContestSheetDataDto { Contest = contest.Contest, CompetitorWhite = contest.CompeditorWhite, CompetitorBlue = contest.CompeditorBlue, IponWhite = contest.IponWhite, WazaariWhite = contest.WazaariWhite, IponBlue = contest.IponBlue, WazaariBlue = contest.WazaariBlue, }); }
private async Task updateClients(ContestType type, ContestSheetData contest, Category category) { if (type == ContestType.RoundRobin) { var rrDto = contest.ToRoundRobinDto(category); await _hub.Clients.Group($"t{contest.TournamentID}c{contest.CategoryID}").SendAsync("updateSheet", rrDto); } else { var dto = contest.ToDTO(); await _hub.Clients.Group($"t{contest.TournamentID}c{contest.CategoryID}").SendAsync("updateSheet", dto); } }
public static bool WhiteWon(this ContestSheetData contest) { if (contest.IponWhite == 1) { return(true); } if (contest.WazaariWhite == 2) { return(true); } if (contest.WazaariWhite == 1 && contest.IponBlue == 0 && contest.WazaariBlue == 0) { return(true); } return(false); }
public async Task <IActionResult> PostContestSheetData([FromBody, Required] ContestSheetData contestData) { if (ModelState.IsValid) { Console.WriteLine($"{contestData.TournamentID}\t{contestData.CategoryID}\t{contestData.Contest}\t{contestData.CompeditorWhite}"); ContestSheetData existingContest = await _db.ContestSheetData.Where(o => o.TournamentID == contestData.TournamentID && o.CategoryID == contestData.CategoryID && o.Contest == contestData.Contest).FirstOrDefaultAsync(); Category category = await _db.Categories.Include(o => o.SheetData).Where(c => c.ID == contestData.CategoryID && c.TournamentID == contestData.TournamentID).FirstOrDefaultAsync(); if (existingContest == null) { try { await _db.ContestSheetData.AddAsync(contestData); await _db.SaveChangesAsync(); await updateClients(category.GetContestType(), contestData, category); } catch (Exception e) { return(BadRequest(e.ToString())); } return(Ok()); } else { Console.WriteLine($"{existingContest.ID}"); existingContest.UpdateFromQuery(contestData); try { await _db.SaveChangesAsync(); } catch (Exception e) { return(BadRequest(e.ToString())); } await updateClients(category.GetContestType(), contestData, category); } return(Ok()); } return(BadRequest()); }
public static string GroupName(this ContestSheetData contest) { return($"t{contest.TournamentID}c{contest.CategoryID}"); }
public static RoundRobinSheetDataDto ToRoundRobinDto(this ContestSheetData contest, Category category) { List <CompetitorDto> competitors = new List <CompetitorDto>(); EventResult result1; EventResult result2; EventResult result3; EventResult result4; EventResult result5; EventResult result6; ContestSheetData finalContest; switch (category.SheetSize) { case 3: result1 = category.CalculateRR3Result(1); category.TryGet(1, out ContestSheetData contest1); competitors.Add(new CompetitorDto { Name = contest1.CompeditorWhite, Score = result1.Points, Won = result1.Won, }); result2 = category.CalculateRR3Result(2); competitors.Add(new CompetitorDto { Name = contest1.CompeditorBlue, Score = result2.Points, Won = result2.Won, }); result3 = category.CalculateRR3Result(3); category.TryGet(2, out ContestSheetData contest2); competitors.Add(new CompetitorDto { Name = contest2.CompeditorBlue, Score = result3.Points, Won = result3.Won, }); if (category.TryGet(3, out finalContest)) { RankCompetitors(); } break; case 4: result1 = category.CalculateRR4Result(1); category.TryGet(1, out contest1); competitors.Add(new CompetitorDto { Name = contest1.CompeditorWhite, Score = result1.Points, Won = result1.Won, }); result2 = category.CalculateRR4Result(2); competitors.Add(new CompetitorDto { Name = contest1.CompeditorBlue, Score = result2.Points, Won = result2.Won, }); result3 = category.CalculateRR4Result(3); if (category.TryGet(2, out contest2)) { competitors.Add(new CompetitorDto { Name = contest2.CompeditorWhite, Score = result3.Points, Won = result3.Won, }); result4 = category.CalculateRR4Result(4); competitors.Add(new CompetitorDto { Name = contest2.CompeditorBlue, Score = result4.Points, Won = result4.Won, }); } if (category.TryGet(6, out finalContest)) { RankCompetitors(); } break; case 5: result1 = category.CalculateRR5Result(1); category.TryGet(1, out contest1); competitors.Add(new CompetitorDto { Name = contest1.CompeditorWhite, Score = result1.Points, Won = result1.Won, }); result2 = category.CalculateRR5Result(2); competitors.Add(new CompetitorDto { Name = contest1.CompeditorBlue, Score = result2.Points, Won = result2.Won, }); result3 = category.CalculateRR5Result(3); if (category.TryGet(2, out contest2)) { competitors.Add(new CompetitorDto { Name = contest2.CompeditorWhite, Score = result3.Points, Won = result3.Won, }); result4 = category.CalculateRR5Result(4); competitors.Add(new CompetitorDto { Name = contest2.CompeditorBlue, Score = result4.Points, Won = result4.Won, }); } if (category.TryGet(3, out var contest3)) { result5 = category.CalculateRR5Result(5); competitors.Add(new CompetitorDto { Name = contest3.CompeditorBlue, Score = result5.Points, Won = result5.Won, }); } if (category.TryGet(10, out finalContest)) { RankCompetitors(); } else { } break; case 6: result1 = category.CalculateRR6Result(1); category.TryGet(1, out contest1); competitors.Add(new CompetitorDto { Name = contest1.CompeditorWhite, Score = result1.Points, Won = result1.Won, }); result2 = category.CalculateRR6Result(2); competitors.Add(new CompetitorDto { Name = contest1.CompeditorBlue, Score = result2.Points, Won = result2.Won, }); result3 = category.CalculateRR6Result(3); if (category.TryGet(2, out contest2)) { competitors.Add(new CompetitorDto { Name = contest2.CompeditorWhite, Score = result3.Points, Won = result3.Won, }); result4 = category.CalculateRR6Result(4); competitors.Add(new CompetitorDto { Name = contest2.CompeditorBlue, Score = result4.Points, Won = result4.Won, }); } if (category.TryGet(3, out contest3)) { result5 = category.CalculateRR6Result(5); competitors.Add(new CompetitorDto { Name = contest3.CompeditorWhite, Score = result5.Points, Won = result5.Won, }); result6 = category.CalculateRR6Result(6); competitors.Add(new CompetitorDto { Name = contest3.CompeditorBlue, Score = result6.Points, Won = result6.Won, }); } if (category.TryGet(15, out finalContest)) { RankCompetitors(); } else { } break; } return(new RoundRobinSheetDataDto { Contest = contest.Contest, CompetitorWhite = contest.CompeditorWhite, CompetitorBlue = contest.CompeditorBlue, IponWhite = contest.IponWhite, WazaariWhite = contest.WazaariWhite, IponBlue = contest.IponBlue, WazaariBlue = contest.WazaariBlue, Competitors = competitors, }); void RankCompetitors() { // Rank the competitors by won contests, then by points. Then assing the ranking. var ranked = competitors.OrderByDescending(c => c.Won).ThenByDescending(c => c.Score); for (int i = 1; i < ranked.Count() + 1; i++) { competitors.Where(c => c.Name == ranked.ElementAt(i - 1).Name).First().Position = i; } } }
public async Task UpdateSheet(ContestSheetData contestData) { //await Clients.All.SendAsync("updateSheet", contestData); await Clients.Group(contestData.GroupName()).SendAsync("updateSheet", contestData); }