Skip to content

Commit 562d210

Browse files
authored
1 parent 64f1c6c commit 562d210

20 files changed

Lines changed: 843 additions & 122 deletions

File tree

generated/schema.graphql

Lines changed: 142 additions & 0 deletions
Large diffs are not rendered by default.

generated/schema.ts

Lines changed: 128 additions & 46 deletions
Large diffs are not rendered by default.

generated/types.ts

Lines changed: 271 additions & 0 deletions
Large diffs are not rendered by default.

hasura/metadata/databases/default/tables/public_matches.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,7 @@ select_permissions:
487487
- organizer_steam_id
488488
- region
489489
- scheduled_at
490+
- server_error
490491
- server_id
491492
- started_at
492493
- status
@@ -539,6 +540,7 @@ select_permissions:
539540
- organizer_steam_id
540541
- region
541542
- scheduled_at
543+
- server_error
542544
- server_id
543545
- started_at
544546
- status
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
alter table "public"."matches" drop column "server_error";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
alter table "public"."matches" add column if not exists "server_error" text null;

hasura/triggers/match_options.sql

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,23 @@ END;
194194
$$;
195195

196196
DROP TRIGGER IF EXISTS tad_match_options ON public.match_options;
197-
CREATE TRIGGER tad_match_options AFTER DELETE ON public.match_options FOR EACH ROW EXECUTE FUNCTION public.tad_match_options();
197+
CREATE TRIGGER tad_match_options AFTER DELETE ON public.match_options FOR EACH ROW EXECUTE FUNCTION public.tad_match_options();
198+
199+
CREATE OR REPLACE FUNCTION public.cleanup_orphaned_match_options(target_id uuid)
200+
RETURNS void
201+
LANGUAGE plpgsql
202+
AS $$
203+
BEGIN
204+
IF target_id IS NULL THEN
205+
RETURN;
206+
END IF;
207+
208+
IF NOT EXISTS (SELECT 1 FROM public.matches WHERE match_options_id = target_id)
209+
AND NOT EXISTS (SELECT 1 FROM public.tournaments WHERE match_options_id = target_id)
210+
AND NOT EXISTS (SELECT 1 FROM public.tournament_stages WHERE match_options_id = target_id)
211+
AND NOT EXISTS (SELECT 1 FROM public.tournament_brackets WHERE match_options_id = target_id)
212+
THEN
213+
DELETE FROM public.match_options WHERE id = target_id;
214+
END IF;
215+
END;
216+
$$;

hasura/triggers/matches.sql

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ CREATE OR REPLACE FUNCTION public.tbi_match() RETURNS TRIGGER
22
LANGUAGE plpgsql
33
AS $$
44
DECLARE
5-
lan_match BOOLEAN;
65
_lineup_1_id UUID;
76
_lineup_2_id UUID;
87
_regions text[];
@@ -39,17 +38,24 @@ BEGIN
3938
SELECT regions INTO _regions FROM match_options WHERE id = NEW.match_options_id;
4039

4140
IF array_length(_regions, 1) != 0 THEN
42-
SELECT array_agg(sr.value) INTO available_regions
41+
SELECT array_agg(sr.value) INTO available_regions
4342
FROM server_regions sr
4443
WHERE sr.value = ANY(_regions)
45-
AND total_region_server_count(sr) > 0;
44+
AND region_status(sr) != 'Disabled';
4645
ELSE
47-
SELECT array_agg(sr.value) INTO available_regions
46+
SELECT array_agg(sr.value) INTO available_regions
4847
FROM server_regions sr
49-
WHERE total_region_server_count(sr) > 0
48+
WHERE region_status(sr) != 'Disabled'
5049
and sr.is_lan = false;
5150
END IF;
5251

52+
-- Fallback: if nothing matched above (e.g. LAN-only)
53+
IF available_regions IS NULL OR array_length(available_regions, 1) = 0 THEN
54+
SELECT array_agg(sr.value) INTO available_regions
55+
FROM server_regions sr
56+
WHERE region_status(sr) != 'Disabled';
57+
END IF;
58+
5359
IF array_length(available_regions, 1) = 1 THEN
5460
NEW.region = available_regions[1];
5561
END IF;
@@ -377,15 +383,7 @@ CREATE OR REPLACE FUNCTION public.tad_matches() RETURNS TRIGGER
377383
LANGUAGE plpgsql
378384
AS $$
379385
BEGIN
380-
IF NOT EXISTS (
381-
SELECT 1
382-
FROM tournaments
383-
WHERE match_options_id = OLD.match_options_id
384-
)
385-
THEN
386-
DELETE FROM match_options
387-
WHERE id = OLD.match_options_id;
388-
END IF;
386+
PERFORM cleanup_orphaned_match_options(OLD.match_options_id);
389387

390388
update servers set reserved_by_match_id = null where reserved_by_match_id = OLD.id;
391389

hasura/triggers/player_assists.sql

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,20 @@ END;
1717
$$;
1818

1919
DROP TRIGGER IF EXISTS tai_player_assists ON public.player_assists;
20-
CREATE TRIGGER tai_player_assists AFTER INSERT ON public.player_assists FOR EACH ROW EXECUTE FUNCTION public.tai_player_assists();
20+
CREATE TRIGGER tai_player_assists AFTER INSERT ON public.player_assists FOR EACH ROW EXECUTE FUNCTION public.tai_player_assists();
21+
22+
CREATE OR REPLACE FUNCTION public.tad_player_assists()
23+
RETURNS trigger
24+
LANGUAGE plpgsql
25+
AS $$
26+
BEGIN
27+
UPDATE player_stats
28+
SET assists = GREATEST(assists - 1, 0)
29+
WHERE player_steam_id = OLD.attacker_steam_id;
30+
31+
RETURN OLD;
32+
END;
33+
$$;
34+
35+
DROP TRIGGER IF EXISTS tad_player_assists ON public.player_assists;
36+
CREATE TRIGGER tad_player_assists AFTER DELETE ON public.player_assists FOR EACH ROW EXECUTE FUNCTION public.tad_player_assists();

hasura/triggers/player_kills.sql

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,41 @@ END;
3737
$$;
3838

3939
DROP TRIGGER IF EXISTS tai_player_kills ON public.player_kills;
40-
CREATE TRIGGER tai_player_kills AFTER INSERT ON public.player_kills FOR EACH ROW EXECUTE FUNCTION public.tai_player_kills();
40+
CREATE TRIGGER tai_player_kills AFTER INSERT ON public.player_kills FOR EACH ROW EXECUTE FUNCTION public.tai_player_kills();
41+
42+
CREATE OR REPLACE FUNCTION public.tad_player_kills()
43+
RETURNS trigger
44+
LANGUAGE plpgsql
45+
AS $$
46+
BEGIN
47+
UPDATE player_kills_by_weapon
48+
SET kill_count = kill_count - 1
49+
WHERE player_steam_id = OLD.attacker_steam_id AND "with" = OLD."with";
50+
51+
DELETE FROM player_kills_by_weapon
52+
WHERE player_steam_id = OLD.attacker_steam_id
53+
AND "with" = OLD."with"
54+
AND kill_count <= 0;
55+
56+
-- attacker: kills + headshots
57+
UPDATE player_stats
58+
SET kills = GREATEST(kills - 1, 0),
59+
headshots = GREATEST(headshots - CASE WHEN OLD.headshot THEN 1 ELSE 0 END, 0),
60+
headshot_percentage = CASE
61+
WHEN GREATEST(kills - 1, 0) = 0 THEN 0
62+
ELSE GREATEST(headshots - CASE WHEN OLD.headshot THEN 1 ELSE 0 END, 0)::float
63+
/ GREATEST(kills - 1, 0)
64+
END
65+
WHERE player_steam_id = OLD.attacker_steam_id;
66+
67+
-- victim: deaths
68+
UPDATE player_stats
69+
SET deaths = GREATEST(deaths - 1, 0)
70+
WHERE player_steam_id = OLD.attacked_steam_id;
71+
72+
RETURN OLD;
73+
END;
74+
$$;
75+
76+
DROP TRIGGER IF EXISTS tad_player_kills ON public.player_kills;
77+
CREATE TRIGGER tad_player_kills AFTER DELETE ON public.player_kills FOR EACH ROW EXECUTE FUNCTION public.tad_player_kills();

0 commit comments

Comments
 (0)