From 42348ff6250f84cc776b2b11f07497f29d0185ef Mon Sep 17 00:00:00 2001 From: Grail Finder Date: Tue, 1 Jul 2025 11:30:47 +0300 Subject: [PATCH] Feat: db migrations [WIP] --- Makefile | 6 +++ gralias.db | Bin 0 -> 40960 bytes migrations/001_initial_schema.down.sql | 7 +++ migrations/001_initial_schema.up.sql | 62 +++++++++++++++++++++++++ repos/main.go | 9 ++++ repos/rooms.go | 15 ++++++ 6 files changed, 99 insertions(+) create mode 100644 gralias.db create mode 100644 migrations/001_initial_schema.down.sql create mode 100644 migrations/001_initial_schema.up.sql create mode 100644 repos/main.go create mode 100644 repos/rooms.go 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 0000000000000000000000000000000000000000..47b356f36a59665ab08baf98b0da93087b39744e GIT binary patch literal 40960 zcmeI($!^<57zc1NvaKa`)f*21iZKe*B4RfPy4(s>amImAEe=fq@rj_QsX~;C!bPqR zJ;X^0^a1(+ea0NyLq85_$&_US1_Bfy{)AzE!?Z zR8{$jF-1|f>D8jw)mEp2t*aB-tJjWiJKR>jS^T-%{!(c+K2zF%wZGo|>hq5eKR*1s z^?UOJC1HaA1Rwwb2teR}7PwqA>)NA7>W8Dmo_NA`5;qLuV%It{c-Q32>^|#rRwS}c zi_zvzS#N0a7u;YcMsLtH&e+fVjCIH6s5hi~13oklWXUKDeT#~l{FTXuBYKVd{XB~< z8Ai8eSWf5_*~{Y8IxD%Di%pfz!zjN?UOGFyafu-HCnB=!I1U}xPDD|G9Uf+%hnVA~ zB9^UoB9UcV^a;uA4fv_q9h|V|{J1;ro9t+87}P&&nUmk~cx3S2i=l+*6y4UD!H+qW zKH{e=ON%@1RB!2T(?(s}+f(0tFX0`V8tdE9ukq@rS>j)%-#Y@b>a~ECgOJ7|3T%HP zX%_Q^V9!RQKJN~f{Wpy<-_YgaKBX?_QJ~%x{l46*%YMJ#mHl32uZ|j}ey`H+-S0a_ zUUt<@V`zQIMPearkA}%Q!Ev{LS{V4QFRXD)O)~#5) zNk!m@wbOdZYAv&qh4p}H>X(Pxa+<$?Dz7>B>D z+>gX`pV36zpU_O)FV+t)ADelJ8O=}{v3aSCJ}>3Q)+9_mRRrD*YIRN1)ITnymz=lq z*H+0&Cat983U_Ta%%{l4m83icWsxwlZkvV~l9i-UkV{FHif*}mbmeeCjV`r9>YRtyapcUO(<(2)TDrcqqy4C_4b$`V;kSTb7}l#@TyM8n`qMW9PN-ZOeCOkuBda zYsIh_4|^}ioZ9@HzhdP&Y&2vy>ak8yNO#q`_JnSy=97N?1~+OxC=J9L*~<&F)D4m! zzB`z@QF6g1Vd&|*)H}8Pk3v7#AOHafKmY;|fB*y_009U<00I!Go00Izz00bZa0SG_<0uX=z1RzjBfm*HE%)bApKl;Z80SG_<0uX=z1Rwwb2tWV= z5P(311>`^Ye H^#%R|o9k~v literal 0 HcmV?d00001 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 +}