Skip to content

Commit d365104

Browse files
committed
refactor: extract should_auto_schedule helper to deduplicate guard
Extract the duplicated tournament pause/auto_start check from schedule_next_round_robin_matches and tournament_brackets trigger into a shared should_auto_schedule() function.
1 parent da5b67b commit d365104

3 files changed

Lines changed: 26 additions & 30 deletions

File tree

hasura/functions/tournaments/schedule_next_round_robin_matches.sql

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ DECLARE
2020
brackets_to_schedule uuid[];
2121
bracket_id uuid;
2222
bracket_row tournament_brackets%ROWTYPE;
23-
_tournament_status text;
2423
BEGIN
2524
-- Get the finished bracket info
2625
SELECT tb.*, ts.id as stage_id, ts.type as stage_type
@@ -98,25 +97,14 @@ BEGIN
9897
END IF;
9998

10099
-- Schedule all brackets that are ready (skip if tournament is paused or auto_start is off)
101-
IF array_length(brackets_to_schedule, 1) > 0 THEN
102-
DECLARE
103-
_tournament RECORD;
104-
BEGIN
105-
SELECT t.status, t.auto_start INTO _tournament
106-
FROM tournaments t
107-
JOIN tournament_stages ts ON ts.tournament_id = t.id
108-
WHERE ts.id = stage_id;
100+
IF array_length(brackets_to_schedule, 1) > 0 AND should_auto_schedule(stage_id) THEN
101+
FOREACH bracket_id IN ARRAY brackets_to_schedule LOOP
102+
SELECT * INTO bracket_row FROM tournament_brackets WHERE id = bracket_id;
109103

110-
IF _tournament.status != 'Paused' AND _tournament.auto_start THEN
111-
FOREACH bracket_id IN ARRAY brackets_to_schedule LOOP
112-
SELECT * INTO bracket_row FROM tournament_brackets WHERE id = bracket_id;
113-
114-
IF bracket_row.match_id IS NULL THEN
115-
PERFORM schedule_tournament_match(bracket_row);
116-
END IF;
117-
END LOOP;
104+
IF bracket_row.match_id IS NULL THEN
105+
PERFORM schedule_tournament_match(bracket_row);
118106
END IF;
119-
END;
107+
END LOOP;
120108
END IF;
121109
END;
122110
$$;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
CREATE OR REPLACE FUNCTION public.should_auto_schedule(
2+
_tournament_stage_id uuid
3+
)
4+
RETURNS boolean
5+
LANGUAGE plpgsql STABLE
6+
AS $$
7+
DECLARE
8+
_tournament RECORD;
9+
BEGIN
10+
SELECT t.status, t.auto_start INTO _tournament
11+
FROM tournaments t
12+
JOIN tournament_stages ts ON ts.tournament_id = t.id
13+
WHERE ts.id = _tournament_stage_id;
14+
15+
RETURN _tournament.status != 'Paused' AND _tournament.auto_start;
16+
END;
17+
$$;

hasura/triggers/tournament_brackets.sql

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,9 @@ BEGIN
2929

3030
raise notice 'Scheduling match for bracket %', NEW.id;
3131
IF NEW.tournament_team_id_1 IS NOT NULL AND NEW.tournament_team_id_2 IS NOT NULL THEN
32-
DECLARE
33-
_tournament RECORD;
34-
BEGIN
35-
SELECT t.status, t.auto_start INTO _tournament
36-
FROM tournaments t
37-
JOIN tournament_stages ts ON ts.tournament_id = t.id
38-
WHERE ts.id = NEW.tournament_stage_id;
39-
40-
IF _tournament.status != 'Paused' AND _tournament.auto_start THEN
41-
PERFORM schedule_tournament_match(NEW);
42-
END IF;
43-
END;
32+
IF should_auto_schedule(NEW.tournament_stage_id) THEN
33+
PERFORM schedule_tournament_match(NEW);
34+
END IF;
4435
END IF;
4536
END IF;
4637

0 commit comments

Comments
 (0)