werewolves/migrations/1_init.sql

71 lines
2.0 KiB
MySQL
Raw Normal View History

drop table if exists users cascade;
create table users (
id uuid not null default gen_random_uuid() primary key,
username text not null,
display_name text,
pronouns text,
password_hash text not null,
dummy boolean not null default false,
created_at timestamp with time zone not null,
updated_at timestamp with time zone not null,
check (created_at <= updated_at)
);
drop index if exists users_username_idx;
create index users_username_idx on users (username);
drop index if exists users_username_unique;
create unique index users_username_unique on users (lower(username));
drop table if exists login_tokens cascade;
create table login_tokens (
token text not null primary key,
user_id uuid not null references users(id) on delete cascade,
created_at timestamp with time zone not null,
expires_at timestamp with time zone not null,
check (created_at < expires_at)
);
drop type if exists game_status cascade;
create type game_status as enum (
'Lobby',
'RoleReveal',
'Started',
'GameOver',
'Cancelled'
);
drop table if exists games cascade;
create table games (
id uuid not null primary key,
host uuid not null references users(id) on delete cascade,
created_at timestamp with time zone not null default now(),
game_state jsonb not null,
game_status game_status not null default 'Lobby'
);
drop table if exists game_characters cascade;
create table game_characters (
character_id uuid not null primary key,
game_id uuid not null references games(id) on delete cascade,
player_id uuid not null references users(id) on delete cascade,
number integer
);
drop index if exists game_characters_player_id_game_id_unique;
create unique index game_characters_player_id_game_id_unique on game_characters (player_id, game_id);
drop table if exists dead_chat cascade;
create table dead_chat (
message_id uuid not null primary key,
game_id uuid not null references games(id) on delete cascade,
created_at timestamp with time zone not null,
message jsonb not null
);
drop index if exists dead_chat_created_at;
create index dead_chat_created_at on dead_chat(created_at);