Stephen Seo
c8eb6ab5be
AI takes a players turn if they take too long on their turn (currently set to 25 seconds). Backend times out player/game entries in database.
1.6 KiB
1.6 KiB
Backend Database Specification
The backend will use sqlite to store all state for storing players (and their IDs, and paired state), and games in progress.
Table definitions
// enable foreign_keys restrictions
PRAGMA foreign_keys = ON;
// fields should be self explanatory for the players table
CREATE TABLE players (id INTEGER PRIMARY KEY NOT NULL,
date_added TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
game_id INTEGER,
FOREIGN KEY(game_id) REFERENCES games(id) ON DELETE CASCADE);
// "cyan_player" and "magenta_player" should correspond to an existing entry in
// table "players".
// "board" is as explained in backend_protocol_specification.md
// "status" is "0" for cyan's turn, "1" for magenta's turn, "2" for cyan won,
// "3" for magenta won, "4" for draw.
CREATE TABLE games (id INTEGER PRIMARY KEY NOT NULL,
cyan_player INTEGER UNIQUE,
magenta_player INTEGER UNIQUE,
date_added TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
board TEXT NOT NULL,
status INTEGER NOT NULL,
turn_time_start TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(cyan_player) REFERENCES players (id) ON DELETE SET NULL,
FOREIGN KEY(magenta_player) REFERENCES players (id) ON DELETE SET NULL);
"date" entries are used for garbage collection of the database. A predefined length of time will be used to cleanup stale entries. Whenever an entry in the "games" table is updated, the "date" entry will be updated as well.