71 lines
2.0 KiB
SQL
71 lines
2.0 KiB
SQL
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);
|