diff options
author | Tor Andersson <tor@ccxvii.net> | 2023-09-21 22:16:31 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2023-10-05 15:18:36 +0200 |
commit | 12a5afcf439e4879bab5a7bf5a92b6834a619c48 (patch) | |
tree | 02697e1cb870b94c9bdbccebbd637775f8763ec3 /schema.sql | |
parent | 6c5df51ed4d6cd0adbab53df277102738fccc70d (diff) | |
download | server-12a5afcf439e4879bab5a7bf5a92b6834a619c48.tar.gz |
Add match making.
Diffstat (limited to 'schema.sql')
-rw-r--r-- | schema.sql | 80 |
1 files changed, 80 insertions, 0 deletions
@@ -208,6 +208,44 @@ create table if not exists setups ( unique (title_id, player_count, scenario) ); +create table if not exists tickets ( + ticket_id integer primary key, + user_id integer, + setup_id integer, + pace integer, + time real, -- julianday + unique (user_id, setup_id, pace) +); + +drop view if exists ticket_rating_view; +create view ticket_rating_view as + select + tickets.*, + coalesce(rating, 1500) as rating + from tickets + join setups using(setup_id) + left join ratings using(title_id, user_id) + where time < julianday('now', '-30 seconds') +; + +drop view if exists matchmaking_view; +create view matchmaking_view as + select + setup_id, + pace, + count(1) / player_count as n, + julianday() - min(time) as age + from + tickets + join setups using(setup_id) + where + time < julianday('now', '-30 seconds') + group by + setup_id, pace + having n > 0 + order by age desc +; + -- Friend and Block Lists -- create table if not exists contacts ( @@ -525,6 +563,47 @@ begin games.game_id = old.game_id; end; +drop trigger if exists trigger_part_check; +create trigger trigger_part_check before delete on players +begin + select + raise(abort, 'Cannot remove players from matches and/or finished games!') + where + old.user_id > 0 and exists ( + select 1 from games where games.game_id=old.game_id and ( is_match or status > 1 ) + ) + ; +end; + +-- Log matchmaking runs and expired tickets + +create table if not exists matchmaking_log ( + time datetime default current_timestamp, + setup_id integer, + pace integer, + age real, + score integer, + tickets json, + matches json +); + +drop view if exists matchmaking_log_view; +create view matchmaking_log_view as + select + time, title_id, player_count, scenario, pace, age, score, tickets, matches + from + matchmaking_log + join setups using(setup_id) +; + +create table if not exists expired_tickets_log ( + user_id integer, + setup_id integer, + pace integer, + ctime datetime, + xtime datetime +); + -- Trigger to remove game data when filing a game as archived drop trigger if exists trigger_archive_game; @@ -570,6 +649,7 @@ begin delete from threads where author_id = old.user_id; delete from game_chat where user_id = old.user_id; delete from ratings where user_id = old.user_id; + delete from tickets where user_id = old.user_id; update games set owner_id = 0 where owner_id = old.user_id; update players set user_id = 0 where user_id = old.user_id; end; |