diff --git a/Makefile b/Makefile index daa5e81..73b07ec 100644 --- a/Makefile +++ b/Makefile @@ -33,3 +33,9 @@ stop-container: run-container: stop-container docker run --name=gralias -v $(CURDIR)/store.json:/root/store.json -p 0.0.0.0:3000:3000 -d gralias:master + +migrate-up: + migrate -database 'sqlite3://gralias.db' -path migrations up + +migrate-down: + migrate -database 'sqlite3://gralias.db' -path migrations down diff --git a/gralias.db b/gralias.db new file mode 100644 index 0000000..47b356f Binary files /dev/null and b/gralias.db differ diff --git a/migrations/001_initial_schema.down.sql b/migrations/001_initial_schema.down.sql new file mode 100644 index 0000000..305ad3a --- /dev/null +++ b/migrations/001_initial_schema.down.sql @@ -0,0 +1,7 @@ +-- migrations/001_initial_schema.down.sql + +DROP TABLE IF EXISTS actions; +DROP TABLE IF EXISTS card_marks; +DROP TABLE IF EXISTS word_cards; +DROP TABLE IF EXISTS players; +DROP TABLE IF EXISTS rooms; diff --git a/migrations/001_initial_schema.up.sql b/migrations/001_initial_schema.up.sql new file mode 100644 index 0000000..e7b1d74 --- /dev/null +++ b/migrations/001_initial_schema.up.sql @@ -0,0 +1,62 @@ +-- migrations/001_initial_schema.up.sql + +CREATE TABLE rooms ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL, + creator_name TEXT NOT NULL, + team_turn TEXT, + this_turn_limit INTEGER, + opened_this_turn INTEGER, + blue_counter INTEGER, + red_counter INTEGER, + red_turn BOOLEAN, + mime_done BOOLEAN, + is_public BOOLEAN, + is_running BOOLEAN, + language TEXT, + round_time INTEGER, + is_over BOOLEAN, + team_won TEXT, + room_pass TEXT +); + +CREATE TABLE players ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + room_id TEXT NOT NULL, + username TEXT NOT NULL, + team TEXT, -- 'red' or 'blue' + role TEXT, -- 'guesser' or 'mime' + is_bot BOOLEAN DEFAULT FALSE, + FOREIGN KEY (room_id) REFERENCES rooms(id) +); + +CREATE TABLE word_cards ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + room_id TEXT NOT NULL, + word TEXT NOT NULL, + color TEXT, + revealed BOOLEAN DEFAULT FALSE, + mime_view BOOLEAN DEFAULT FALSE, + FOREIGN KEY (room_id) REFERENCES rooms(id) +); + +CREATE TABLE card_marks ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + card_id INTEGER NOT NULL, + username TEXT NOT NULL, + active BOOLEAN DEFAULT TRUE, + FOREIGN KEY (card_id) REFERENCES word_cards(id) +); + +CREATE TABLE actions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + room_id TEXT NOT NULL, + actor TEXT NOT NULL, + actor_color TEXT, + action_type TEXT NOT NULL, + word TEXT, + word_color TEXT, + number_associated TEXT, -- for clues + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (room_id) REFERENCES rooms(id) +); diff --git a/repos/main.go b/repos/main.go new file mode 100644 index 0000000..87106ff --- /dev/null +++ b/repos/main.go @@ -0,0 +1,9 @@ +package repos + +type AllRepos interface { + RoomsRepo +} + +type RepoProvider struct { + // db connection +} diff --git a/repos/rooms.go b/repos/rooms.go new file mode 100644 index 0000000..f0ae01b --- /dev/null +++ b/repos/rooms.go @@ -0,0 +1,15 @@ +package repos + +import "gralias/models" + +type RoomsRepo interface { + ListRooms() ([]models.Room, error) + GetRoomByID(id string) (*models.Room, error) + CreateRoom(room *models.Room) error + DeleteRoomByID(id string) error +} + +// provider implementation +func (p RepoProvider) ListRooms() ([]models.Room, error) { + return nil, nil +}