Skip to content

Commit e03de3b

Browse files
committed
feat: block auto-scheduling when tournament is paused
1 parent 410155a commit e03de3b

2 files changed

Lines changed: 31 additions & 11 deletions

File tree

hasura/functions/tournaments/schedule_next_round_robin_matches.sql

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ DECLARE
2020
brackets_to_schedule uuid[];
2121
bracket_id uuid;
2222
bracket_row tournament_brackets%ROWTYPE;
23+
_tournament_status text;
2324
BEGIN
2425
-- Get the finished bracket info
2526
SELECT tb.*, ts.id as stage_id, ts.type as stage_type
@@ -96,15 +97,22 @@ BEGIN
9697
END IF;
9798
END IF;
9899

99-
-- Schedule all brackets that are ready
100+
-- Schedule all brackets that are ready (skip if tournament is paused)
100101
IF array_length(brackets_to_schedule, 1) > 0 THEN
101-
FOREACH bracket_id IN ARRAY brackets_to_schedule LOOP
102-
SELECT * INTO bracket_row FROM tournament_brackets WHERE id = bracket_id;
103-
104-
IF bracket_row.match_id IS NULL THEN
105-
PERFORM schedule_tournament_match(bracket_row);
106-
END IF;
107-
END LOOP;
102+
SELECT t.status INTO _tournament_status
103+
FROM tournaments t
104+
JOIN tournament_stages ts ON ts.tournament_id = t.id
105+
WHERE ts.id = stage_id;
106+
107+
IF _tournament_status != 'Paused' THEN
108+
FOREACH bracket_id IN ARRAY brackets_to_schedule LOOP
109+
SELECT * INTO bracket_row FROM tournament_brackets WHERE id = bracket_id;
110+
111+
IF bracket_row.match_id IS NULL THEN
112+
PERFORM schedule_tournament_match(bracket_row);
113+
END IF;
114+
END LOOP;
115+
END IF;
108116
END IF;
109117
END;
110118
$$;

hasura/triggers/tournament_brackets.sql

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,19 @@ 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-
PERFORM schedule_tournament_match(NEW);
32+
-- Skip auto-scheduling if tournament is paused
33+
DECLARE
34+
_tournament_status text;
35+
BEGIN
36+
SELECT t.status INTO _tournament_status
37+
FROM tournaments t
38+
JOIN tournament_stages ts ON ts.tournament_id = t.id
39+
WHERE ts.id = NEW.tournament_stage_id;
40+
41+
IF _tournament_status != 'Paused' THEN
42+
PERFORM schedule_tournament_match(NEW);
43+
END IF;
44+
END;
3345
END IF;
3446
END IF;
3547

@@ -47,8 +59,8 @@ BEGIN
4759
JOIN tournament_stages ts ON ts.tournament_id = t.id
4860
WHERE ts.id = NEW.tournament_stage_id;
4961

50-
IF tournament_status NOT IN ('Setup', 'RegistrationOpen', 'RegistrationClosed', 'Live') THEN
51-
RAISE EXCEPTION 'Tournament status must be Setup, Registration Open, Registration Closed or Live' USING ERRCODE = '22000';
62+
IF tournament_status NOT IN ('Setup', 'RegistrationOpen', 'RegistrationClosed', 'Live', 'Paused') THEN
63+
RAISE EXCEPTION 'Tournament status must be Setup, Registration Open, Registration Closed, Live or Paused' USING ERRCODE = '22000';
5264
END IF;
5365
END IF;
5466

0 commit comments

Comments
 (0)