@@ -1,6 +1,8 @@
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Linq.Expressions ;
using System.Reactive.Subjects ;
using System.Threading.Tasks ;
using LaDOSE.Business.Helper ;
using LaDOSE.Business.Interface ;
@@ -75,87 +77,87 @@ namespace LaDOSE.Business.Service
//}
}
public async Task< TournamentsResult> Get TournamentsResult( List < int > ids )
{
TournamentsResult result = new TournamentsResult( ) ;
result. Results = new List < Result > ( ) ;
var players = _context. WPUser. ToList( ) ;
var games = _context. Game . ToList ( ) ;
var tournaments = await GetChallongeTournaments( ids , games ) ;
// public async Task< TournamentsResult> GetChallonge TournamentsResult(List<int> ids)
// {
// TournamentsResult result = new TournamentsResult() ;
// result. Results = new List<Result>() ;
// var players = _context. WPUser. ToList() ;
// var games = _context.Game.ToList() ;
// var tournaments = await GetChallongeTournaments(ids, games) ;
var allParticipent = tournaments. SelectMany( e = > e . Participents ) . Distinct ( ( a , b ) = > a . Name = = b . Name )
. ToList( ) ;
// var allParticipent = tournaments. SelectMany(e => e.Participents).Distinct((a, b) => a.Name == b. Name)
// . ToList() ;
allParticipent. RemoveAll( e = > e . Name . StartsWith( "[FORFAIT]") ) ;
//USELESS
//foreach (var participent in allParticipent)
//{
// var player = players.FirstOrDefault(e => e.Name.Contains(participent.Name));
// if (player != null)
// {
// participent.IsMember = true;
// }
//}
// allParticipent. RemoveAll(e => e.Name. StartsWith( "[FORFAIT]")) ;
// //USELESS
// //foreach (var participent in allParticipent)
// //{
// // var player = players.FirstOrDefault(e => e.Name.Contains(participent.Name));
// // if (player != null)
// // {
// // participent.IsMember = true;
// // }
// //}
result. Participents = allParticipent ;
// result. Participents = allParticipent;
foreach ( var tournament in tournaments )
{
// foreach (var tournament in tournaments)
// {
var playerCount = tournament. Participents. Count ;
var lesSacs = tournament. Participents ;
var currentRule = TournamentRules. FirstOrDefault( rules = >
rules. PlayerMin < playerCount & & rules . PlayerMax > = playerCount
) ;
if ( currentRule = = null )
{
throw new Exception( "Unable to find rules") ;
}
// var playerCount = tournament. Participents. Count;
// var lesSacs = tournament. Participents;
// var currentRule = TournamentRules. FirstOrDefault(rules = >
// rules. PlayerMin < playerCount && rules.PlayerMax >= playerCount
// ) ;
// if ( currentRule == null)
// {
// throw new Exception( "Unable to find rules") ;
// }
var first = tournament. Participents. First ( p = > p . Rank = = 1 ) ;
var second = tournament. Participents. First ( p = > p . Rank = = 2 ) ;
var thirdFourth = tournament. Participents. Where ( p = > p . Rank = = 3 | | p . Rank = = 4 ) . ToList ( ) ;
var Top8 = tournament. Participents. Where ( p = > p . Rank > 4 & & p . Rank < 9 ) . ToList ( ) ;
var Top16 = tournament. Participents. Where ( p = > p . Rank > 8 & & p . Rank < = 16 ) . ToList ( ) ;
// var first = tournament. Participents.First(p => p.Rank == 1) ;
// var second = tournament. Participents.First(p => p.Rank == 2) ;
// var thirdFourth = tournament. Participents.Where(p => p.Rank == 3 || p.Rank == 4).ToList() ;
// var Top8 = tournament. Participents.Where(p => p.Rank > 4 && p.Rank < 9).ToList() ;
// var Top16 = tournament. Participents.Where(p => p.Rank > 8 && p.Rank <= 16).ToList() ;
result. Results. Add ( new Result ( first . Name , tournament . Game ? . Id ? ? 0 , tournament. ChallongeId, tournament. Url , currentRule. FirstPoint, first . Rank ? ? 0 ) ) ;
lesSacs. Remove( first ) ;
result. Results. Add ( new Result( second. Name , tournament . Game ? . Id ? ? 0 , tournament. ChallongeId, tournament. Url , currentRule. SecondPoint, second . Rank ? ? 0 ) ) ;
lesSacs. Remove( second) ;
thirdFourth. ForEach( r = >
result. Results. Add ( new Result ( r . Name , tournament . Game ? . Id ? ? 0 , tournament. ChallongeId, tournament. Url ,
currentRule. ThirdFourthPoint, r . Rank ? ? 0 ) ) ) ;
thirdFourth. ForEach( p = > lesSacs. Remove( p ) ) ;
if ( currentRule. Top8Point ! = 0 )
{
Top8. ForEach( r = >
result. Results. Add ( new Result ( r . Name , tournament . Game ? . Id ? ? 0 , tournament. ChallongeId, tournament. Url , currentRule. Top8Point, r . Rank ? ? 0 ) ) ) ;
Top8. ForEach( p = > lesSacs. Remove( p ) ) ;
}
// result. Results.Add(new Result(first.Name, tournament.Game?.Id ?? 0, tournament. ChallongeId, tournament.Url, currentRule. FirstPoint, first.Rank ?? 0)) ;
// lesSacs. Remove(first) ;
// result. Results.Add(new Result( second.Name, tournament.Game?.Id ?? 0, tournament. ChallongeId, tournament.Url, currentRule. SecondPoint, second.Rank ?? 0)) ;
// lesSacs. Remove( second) ;
// thirdFourth. ForEach(r = >
// result. Results.Add(new Result(r.Name, tournament.Game?.Id ?? 0, tournament. ChallongeId, tournament. Url,
// currentRule. ThirdFourthPoint, r.Rank ?? 0))) ;
// thirdFourth. ForEach(p => lesSacs. Remove(p)) ;
// if ( currentRule. Top8Point != 0 )
// {
// Top8. ForEach(r = >
// result. Results.Add(new Result(r.Name, tournament.Game?.Id ?? 0, tournament. ChallongeId, tournament.Url, currentRule. Top8Point, r.Rank ?? 0))) ;
// Top8. ForEach(p => lesSacs. Remove(p)) ;
// }
if ( currentRule. Top16Point ! = 0 )
{
Top16. ForEach( r = >
result. Results. Add (
new Result( r . Name , tournament . Game ? . Id ? ? 0 , tournament. ChallongeId, tournament. Url , currentRule. Top16Point, r . Rank ? ? 0 ) ) ) ;
Top16. ForEach( p = > lesSacs. Remove( p ) ) ;
}
// if ( currentRule. Top16Point != 0 )
// {
// Top16. ForEach(r = >
// result. Results. Add(
// new Result(r.Name, tournament.Game?.Id ?? 0, tournament. ChallongeId, tournament.Url, currentRule. Top16Point, r.Rank ?? 0))) ;
// Top16. ForEach(p => lesSacs. Remove(p)) ;
// }
lesSacs. ForEach( r = >
result. Results. Add ( new Result ( r . Name , tournament . Game ? . Id ? ? 0 , tournament. ChallongeId, tournament. Url ,
currentRule. Participation, r . Rank ? ? 0 ) ) ) ;
}
// lesSacs. ForEach(r = >
// result. Results.Add(new Result(r.Name, tournament.Game?.Id ?? 0, tournament. ChallongeId, tournament. Url,
// currentRule. Participation, r.Rank ?? 0))) ;
// }
result. Games = tournaments. Select( e = > e . Game ) . Distinct ( ( game , game1 ) = > game . Name = = game1 . Name ) . Where ( e = > e ! = null ) . ToList ( ) ;
if ( result . Games = = null )
{
result. Games = new List < Game > ( ) ;
}
result. Games . Add ( new Game ( ) { Id = 0 , Order = 9999 , Name = "UNKNOW" } ) ;
return result ;
}
// result.Games = tournaments. Select(e => e.Game).Distinct((game, game1) => game.Name == game1.Name).Where(e => e != null).ToList() ;
// if (result.Games == null)
// {
// result.Games = new List<Game>() ;
// }
// result.Games.Add(new Game() { Id = 0, Order = 9999, Name = "UNKNOW" }) ;
// return result;
// }
public async Task < Event > ParseSmash ( string tournamentSlug )
@@ -189,23 +191,33 @@ namespace LaDOSE.Business.Service
}
public Task < List < Event > > ParseChallonge ( List < int > ids )
{
return _challongeProvider . ParseEvent ( ids ) ;
}
private Event GetBySlug ( string tournamentSlug )
{
return _context . Event . FirstOrDefault ( e = > e . SmashSlug = = tournamentSlug ) ;
}
public async Task< TournamentsResult> GetSmashResult( string tournamentSlug )
{
var parse = await this. ParseSmash( tournamentSlug) ;
var test = await GetEventResult( parse . Id ) ;
return test ;
// public async Task< TournamentsResult> GetSmashResult( string tournamentSlug)
// {
// var parse = await this. ParseSmash( tournamentSlug) ;
// var test = await GetEventResult(parse.Id) ;
// return test;
}
// }
//public async Task<TournamentsResult> GetEventsResult(List<int> events)
//{
// var test = await GetEventsResult(events);
// return test;
//}
public async Task < List < Event > > GetChallongeEvents ( List < int > ids )
{
var events = await this . _challongeProvider . Get Events ( ids ) ;
var events = await this . _challongeProvider . Parse Event( ids ) ;
this . _context . Event . AddRange ( events ) ;
return events ;
}
@@ -251,6 +263,108 @@ namespace LaDOSE.Business.Service
return this . _context . ChallongeTournament . Any ( e = > e . ChallongeId = = idTournament ) ;
}
/// <summary>
/// Get Events Result
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task < TournamentsResult > GetEventsResult ( List < int > id )
{
var cevent = new Event ( ) ;
cevent . Tournaments = new List < Tournament > ( ) ;
List < Player > players = new List < Player > ( ) ;
foreach ( var eventId in id )
{
Event e = _context . Event . Include ( e = > e . Tournaments ) . ThenInclude ( t = > t . Results ) . ThenInclude ( e = > e . Player ) . FirstOrDefault ( e = > e . Id = = eventId ) ;
players = players . Concat ( e . Tournaments . SelectMany ( e = > e . Results . Select ( e = > e . Player ) ) . Distinct ( ) . ToList ( ) ) . ToList ( ) ;
cevent . Tournaments = cevent . Tournaments . Concat ( e . Tournaments ) . ToList ( ) ;
}
var games = _context . Game . ToList ( ) ;
TournamentsResult result = new TournamentsResult ( ) ;
result . Results = new List < Result > ( ) ;
result . Games = new List < Game > ( ) ;
result . Participents = new List < ChallongeParticipent > ( ) ;
players . ForEach ( e = >
{
var x = new ChallongeParticipent ( )
{
Name = e . Gamertag ,
ChallongeId = e . Id ,
Id = e . Id
} ;
result . Participents . Add ( x ) ;
} ) ;
foreach ( var tournament in cevent . Tournaments . Where ( e = > e . Results ! = null & & e . Results . Any ( ) ) . ToList ( ) )
{
var tplayer = tournament . Results . Select ( e = > e . Player ) . ToList ( ) ;
var playerCount = tplayer . Count ( ) ;
var lesSacs = tplayer ;
var currentRule = TournamentRules . FirstOrDefault ( rules = >
rules . PlayerMin < playerCount & & rules . PlayerMax > = playerCount
) ;
if ( currentRule = = null )
{
throw new Exception ( "Unable to find rules" ) ;
}
var first = tournament . Results . First ( p = > p . Rank = = 1 ) ;
var second = tournament . Results . First ( p = > p . Rank = = 2 ) ;
var thirdFourth = tournament . Results . Where ( p = > p . Rank = = 3 | | p . Rank = = 4 ) . ToList ( ) ;
var Top8 = tournament . Results . Where ( p = > p . Rank > 4 & & p . Rank < 9 ) . ToList ( ) ;
var Top16 = tournament . Results . Where ( p = > p . Rank > 8 & & p . Rank < = 16 ) . ToList ( ) ;
result . Results . Add ( new Result ( first . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name , currentRule . FirstPoint , first . Rank ) ) ;
lesSacs . Remove ( first . Player ) ;
result . Results . Add ( new Result ( second . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name , currentRule . SecondPoint , second . Rank ) ) ;
lesSacs . Remove ( second . Player ) ;
thirdFourth . ForEach ( r = >
result . Results . Add ( new Result ( r . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . ThirdFourthPoint , r . Rank ) ) ) ;
thirdFourth . ForEach ( p = > lesSacs . Remove ( p . Player ) ) ;
if ( currentRule . Top8Point ! = 0 )
{
Top8 . ForEach ( r = >
result . Results . Add ( new Result ( r . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . Top8Point , r . Rank ) ) ) ;
Top8 . ForEach ( p = > lesSacs . Remove ( p . Player ) ) ;
}
if ( currentRule . Top16Point ! = 0 )
{
Top16 . ForEach ( r = >
result . Results . Add (
new Result ( r . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . Top16Point , r . Rank ) ) ) ;
Top16 . ForEach ( p = > lesSacs . Remove ( p . Player ) ) ;
}
lesSacs . ForEach ( r = >
result . Results . Add ( new Result ( r . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . Participation , tournament . Results . FirstOrDefault ( e = > e . Player = = r ) ? . Rank ? ? 999 ) ) ) ;
}
if ( result . Results . Any ( e = > e . GameId = = 0 ) )
{
result . Games . Add ( new Game ( ) { Id = 0 , Name = "GAME NOT FOUND" , LongName = "GAME NOT FOUND" , Order = 999 } ) ;
}
var enumerable = result . Results . Select ( e = > e . GameId ) . Distinct ( ) ;
result . Games = _context . Game . Where ( g = > enumerable . Contains ( g . Id ) ) . ToList ( ) ;
System . Diagnostics . Trace . WriteLine ( result . Results ) ;
return await Task . FromResult ( result ) ;
}
/// <summary>
/// Get Result For one Event
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task < TournamentsResult > GetEventResult ( int id )
{
@@ -272,11 +386,6 @@ namespace LaDOSE.Business.Service
} ;
result . Participents . Add ( x ) ;
} ) ;
games . ForEach ( e = >
{
e . Id = e . SmashId ? ? e . Id ;
result . Games . Add ( e ) ;
} ) ;
foreach ( var tournament in cevent . Tournaments . Where ( e = > e . Results ! = null & & e . Results . Any ( ) ) . ToList ( ) )
{
@@ -310,7 +419,7 @@ namespace LaDOSE.Business.Service
{
Top8 . ForEach ( r = >
result . Results . Add ( new Result ( r . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . ThirdFourth Point , r . Rank ) ) ) ;
currentRule . Top8 Point , r . Rank ) ) ) ;
Top8 . ForEach ( p = > lesSacs . Remove ( p . Player ) ) ;
}
@@ -319,13 +428,13 @@ namespace LaDOSE.Business.Service
Top16 . ForEach ( r = >
result . Results . Add (
new Result ( r . Player . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . ThirdFourth Point , r . Rank ) ) ) ;
currentRule . Top16 Point , r . Rank ) ) ) ;
Top16 . ForEach ( p = > lesSacs . Remove ( p . Player ) ) ;
}
lesSacs . ForEach ( r = >
result . Results . Add ( new Result ( r . Gamertag , tournament . Game ? . Id ? ? 0 , tournament . Id , tournament . Name ,
currentRule . ThirdFourthPoint , tournament . Results . FirstOrDefault ( e = > e . Player = = r ) ? . Rank ? ? 999 ) ) ) ;
currentRule . Participation , tournament . Results . FirstOrDefault ( e = > e . Player = = r ) ? . Rank ? ? 999 ) ) ) ;
}
@@ -334,6 +443,9 @@ namespace LaDOSE.Business.Service
result . Games . Add ( new Game ( ) { Id = 0 , Name = "GAME NOT FOUND" , LongName = "GAME NOT FOUND" , Order = 999 } ) ;
}
var enumerable = result . Results . Select ( e = > e . GameId ) . Distinct ( ) ;
result . Games = _context . Game . Where ( g = > enumerable . Contains ( g . Id ) ) . ToList ( ) ;
System . Diagnostics . Trace . WriteLine ( result . Results ) ;
return await Task . FromResult ( result ) ;