From c6a2ae54477b9fb52ff1fd5a9c5564659d793df6 Mon Sep 17 00:00:00 2001 From: Jeffrey Duroyon Date: Mon, 11 May 2020 01:05:30 +0200 Subject: [PATCH] feat: add sql request for getting game --- .../postgresql/database_postgresql_games.go | 28 +++++++++++++++++-- storage/model/cage.go | 8 +++++- storage/model/game.go | 4 +++ storage/model/hamster.go | 3 ++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/storage/dao/postgresql/database_postgresql_games.go b/storage/dao/postgresql/database_postgresql_games.go index de7d2db..11bcde2 100755 --- a/storage/dao/postgresql/database_postgresql_games.go +++ b/storage/dao/postgresql/database_postgresql_games.go @@ -1,13 +1,37 @@ package postgresql -import "hamster-tycoon/storage/model" +import ( + "database/sql" + "github.com/lib/pq" + "hamster-tycoon/storage/dao" + "hamster-tycoon/storage/model" +) func (db *DatabasePostgreSQL) GetAllGames() ([]*model.Game, error) { return nil, nil } func (db *DatabasePostgreSQL) GetGameById(string) (*model.Game, error) { - return nil, nil + q := ` + SELECT g.id, g.server_id, g.user_id, g.created_at, g.updated_at + FROM public.game g + WHERE g.id = $1 + ` + row := db.session.QueryRow(q, id) + + server := model.Server{} + user := model.User{} + game := model.Game{ + Server: server, + } + err := row.Scan(&game.ID, &server.ID, &user.ID, &game.CreatedAt, &game.UpdatedAt) + if errPq, ok := err.(*pq.Error); ok { + return nil, handlePgError(errPq) + } + if err == sql.ErrNoRows { + return nil, dao.NewDAOError(dao.ErrTypeNotFound, err) + } + return &game, err } func (db *DatabasePostgreSQL) CreateGame(*model.Game) error { diff --git a/storage/model/cage.go b/storage/model/cage.go index 6d19aaf..c6ff01c 100644 --- a/storage/model/cage.go +++ b/storage/model/cage.go @@ -1,5 +1,11 @@ package model +import "time" + type Cage struct { - Hamsters []*Hamster `json:"hamsters"` + ID string `json:"id"` + Game Game `json:"game"` + Hamsters []*Hamster `json:"hamsters"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt *time.Time `json:"updatedAt"` } diff --git a/storage/model/game.go b/storage/model/game.go index bbfb627..c231e96 100644 --- a/storage/model/game.go +++ b/storage/model/game.go @@ -1,9 +1,13 @@ package model +import "time" + type Game struct { ID string `json:"game_id"` User User `json:"-"` Server Server `json:"server"` Cages []*Cage `json:"cages"` SoldHamster []*Hamster `json:"sold_hamsters"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt *time.Time `json:"updatedAt"` } diff --git a/storage/model/hamster.go b/storage/model/hamster.go index 97e1b69..87c250a 100644 --- a/storage/model/hamster.go +++ b/storage/model/hamster.go @@ -5,6 +5,7 @@ import ( "fmt" uuid "github.com/satori/go.uuid" "hamster-tycoon/randomizer" + "time" ) const ( @@ -48,6 +49,8 @@ type Hamster struct { GestationCooldown int8 `json:"gestation_cooldown"` GestationFather *Hamster `json:"gestation_father"` Child []*Hamster `json:"childs"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt *time.Time `json:"updatedAt"` } func (h *Hamster) Die() {