diff --git a/hasura/functions/tournaments/schedule_tournament_match.sql b/hasura/functions/tournaments/schedule_tournament_match.sql index 8b833f65..6d25272d 100644 --- a/hasura/functions/tournaments/schedule_tournament_match.sql +++ b/hasura/functions/tournaments/schedule_tournament_match.sql @@ -17,6 +17,7 @@ CREATE OR REPLACE FUNCTION public.schedule_tournament_match(bracket public.tourn _match_options_id UUID; _round_best_of int; _swiss_match_type text; + _max_players_per_lineup int; BEGIN IF bracket.match_id IS NOT NULL THEN RETURN bracket.match_id; @@ -138,6 +139,9 @@ CREATE OR REPLACE FUNCTION public.schedule_tournament_match(bracket public.tourn RETURNING lineup_1_id, lineup_2_id INTO _lineup_1_id, _lineup_2_id; + SELECT tournament_max_players_per_lineup(tournament) + INTO _max_players_per_lineup; + SELECT tt.captain_steam_id INTO _captain_steam_id_1 FROM tournament_teams tt @@ -149,16 +153,48 @@ CREATE OR REPLACE FUNCTION public.schedule_tournament_match(bracket public.tourn WHERE tt.id = bracket.tournament_team_id_2; FOR member IN - SELECT * FROM tournament_team_roster - WHERE tournament_team_id = bracket.tournament_team_id_1 + SELECT ttr.* + FROM tournament_team_roster ttr + INNER JOIN tournament_teams tt + ON tt.id = ttr.tournament_team_id + LEFT JOIN team_roster tr + ON tr.team_id = tt.team_id + AND tr.player_steam_id = ttr.player_steam_id + WHERE ttr.tournament_team_id = bracket.tournament_team_id_1 + ORDER BY + CASE WHEN ttr.player_steam_id = _captain_steam_id_1 THEN 0 ELSE 1 END, + CASE tr.status + WHEN 'Starter' THEN 1 + WHEN 'Substitute' THEN 2 + WHEN 'Benched' THEN 3 + ELSE 4 + END, + ttr.player_steam_id + LIMIT _max_players_per_lineup LOOP INSERT INTO match_lineup_players (match_lineup_id, steam_id) VALUES (_lineup_1_id, member.player_steam_id); END LOOP; FOR member IN - SELECT * FROM tournament_team_roster - WHERE tournament_team_id = bracket.tournament_team_id_2 + SELECT ttr.* + FROM tournament_team_roster ttr + INNER JOIN tournament_teams tt + ON tt.id = ttr.tournament_team_id + LEFT JOIN team_roster tr + ON tr.team_id = tt.team_id + AND tr.player_steam_id = ttr.player_steam_id + WHERE ttr.tournament_team_id = bracket.tournament_team_id_2 + ORDER BY + CASE WHEN ttr.player_steam_id = _captain_steam_id_2 THEN 0 ELSE 1 END, + CASE tr.status + WHEN 'Starter' THEN 1 + WHEN 'Substitute' THEN 2 + WHEN 'Benched' THEN 3 + ELSE 4 + END, + ttr.player_steam_id + LIMIT _max_players_per_lineup LOOP INSERT INTO match_lineup_players (match_lineup_id, steam_id) VALUES (_lineup_2_id, member.player_steam_id); @@ -200,4 +236,4 @@ CREATE OR REPLACE FUNCTION public.schedule_tournament_match(bracket public.tourn RETURN _match_id; END; - $$; \ No newline at end of file + $$;