|
|
|
-- players table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.players (
|
|
|
|
id serial UNIQUE PRIMARY KEY,
|
|
|
|
username varchar(32) NOT NULL,
|
|
|
|
expire timestamp DEFAULT (NOW() + interval '24 hours' )
|
|
|
|
);
|
|
|
|
|
|
|
|
-- lobbys table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.lobbys (
|
|
|
|
id serial UNIQUE PRIMARY KEY,
|
|
|
|
admin_id serial references bingo.players(id) ON DELETE SET NULL,
|
|
|
|
grid_size integer DEFAULT 3 NOT NULL,
|
|
|
|
current_round integer,
|
|
|
|
expire timestamp DEFAULT (NOW() + interval '4 hour' )
|
|
|
|
);
|
|
|
|
|
|
|
|
-- lobbys-players table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.lobby_players (
|
|
|
|
player_id serial references bingo.players(id) ON DELETE CASCADE,
|
|
|
|
lobby_id serial references bingo.lobbys(id) ON DELETE CASCADE,
|
|
|
|
score integer DEFAULT 0,
|
|
|
|
PRIMARY KEY (player_id, lobby_id)
|
|
|
|
);
|
|
|
|
|
|
|
|
-- words table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.words (
|
|
|
|
id bigserial UNIQUE PRIMARY KEY,
|
|
|
|
lobby_id serial references bingo.lobbys(id) ON DELETE CASCADE,
|
|
|
|
heared integer DEFAULT 0 NOT NULL,
|
|
|
|
content varchar(254) NOT NULL
|
|
|
|
);
|
|
|
|
|
|
|
|
-- messages table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.messages (
|
|
|
|
id bigserial UNIQUE PRIMARY KEY,
|
|
|
|
content varchar(255) NOT NULL,
|
|
|
|
player_id integer,
|
|
|
|
lobby_id serial references bingo.lobbys(id) ON DELETE CASCADE,
|
|
|
|
type varchar(8) DEFAULT 'USER' NOT NULL,
|
|
|
|
created timestamp DEFAULT NOW()
|
|
|
|
);
|
|
|
|
|
|
|
|
-- rounds table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.rounds (
|
|
|
|
id serial UNIQUE PRIMARY KEY,
|
|
|
|
start timestamp DEFAULT NOW(),
|
|
|
|
finish timestamp,
|
|
|
|
status varchar(8) DEFAULT 'BUILDING',
|
|
|
|
lobby_id serial references bingo.lobbys(id) ON DELETE CASCADE,
|
|
|
|
winner integer
|
|
|
|
);
|
|
|
|
|
|
|
|
-- grids table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.grids (
|
|
|
|
id serial UNIQUE PRIMARY KEY,
|
|
|
|
player_id serial references bingo.players(id) ON DELETE CASCADE,
|
|
|
|
lobby_id serial references bingo.lobbys(id) ON DELETE CASCADE,
|
|
|
|
round_id serial references bingo.rounds(id) ON DELETE CASCADE,
|
|
|
|
UNIQUE(player_id, lobby_id, round_id)
|
|
|
|
);
|
|
|
|
|
|
|
|
-- grids_words table
|
|
|
|
CREATE TABLE IF NOT EXISTS bingo.grid_words (
|
|
|
|
grid_id serial references bingo.grids(id) ON DELETE CASCADE,
|
|
|
|
word_id serial references bingo.words(id) ON DELETE RESTRICT,
|
|
|
|
grid_row integer NOT NULL,
|
|
|
|
grid_column integer NOT NULL,
|
|
|
|
submitted boolean DEFAULT false,
|
|
|
|
PRIMARY KEY (grid_id, grid_row, grid_column)
|
|
|
|
);
|
|
|
|
|
|
|
|
-- altering
|
|
|
|
|
|
|
|
ALTER TABLE bingo.messages ALTER COLUMN player_id DROP NOT NULL;
|