@@ -24,24 +24,53 @@ export default async ({ isWins, load, playerId }) => {
2424 . where ( { playerId } )
2525 ]
2626 )
27+ . whereNotExists ( query =>
28+ query
29+ . select ( )
30+ . from ( 'series as os' )
31+ . whereRaw (
32+ isWins
33+ ? `os."winningSeriesTeamId" = ??`
34+ : `os."losingSeriesTeamId" = ??` ,
35+ [
36+ query =>
37+ query
38+ . select ( 'seriesTeams.id' )
39+ . from ( 'seriesTeamMembers' )
40+ . join (
41+ 'seriesTeams' ,
42+ 'seriesTeams.id' ,
43+ 'seriesTeamMembers.seriesTeamId'
44+ )
45+ . whereColumn ( 'seriesTeams.seriesId' , 'os.id' )
46+ . where ( { playerId } )
47+ ]
48+ )
49+ . where ( 'os.seasonId' , currentSeason . id )
50+ . whereColumn ( 'os.completedAt' , '<' , 'series.completedAt' )
51+ )
2752 . where ( { seasonId : currentSeason . id } )
28- . orderBy ( 'completedAt' , 'desc ' )
53+ . orderBy ( 'completedAt' , 'asc ' )
2954 . limit ( 1 ) ;
3055
56+ if ( ! last ) return 0 ;
57+
3158 const [ { count : currentStreak } ] = await load . tx
32- . count ( )
59+ . count ( 'series.id' )
3360 . from ( 'series' )
34- . join ( 'seriesTeams' , 'seriesTeams.id' , 'series.id' )
35- . join (
36- 'seriesTeamMembers' ,
37- 'seriesTeamMembers.seriesTeamId' ,
38- 'seriesTeams.id'
61+ . whereExists ( query =>
62+ query
63+ . select ( 'seriesTeams.id' )
64+ . from ( 'seriesTeamMembers' )
65+ . join ( 'seriesTeams' , 'seriesTeams.id' , 'seriesTeamMembers.seriesTeamId' )
66+ . whereColumn ( 'seriesTeams.seriesId' , 'series.id' )
67+ . where ( { playerId } )
3968 )
40- . where ( { playerId , seasonId : currentSeason . id } )
69+ . where ( { seasonId : currentSeason . id } )
4170 . where (
4271 'series.completedAt' ,
4372 '>=' ,
44- new Date ( last ? .completedAt ?? 0 ) . toISOString ( )
73+ new Date ( last . completedAt ) . toISOString ( )
4574 ) ;
4675
4776 return currentStreak ;
0 commit comments