Files
hamster-tycoon/storage/dao/postgresql/database_postgresql_games.go
Jeffrey Duroyon f6195e0638 add games sql
2020-05-16 23:45:08 +02:00

94 lines
1.9 KiB
Go
Executable File

package postgresql
import (
"database/sql"
"github.com/lib/pq"
"hamster-tycoon/storage/dao"
"hamster-tycoon/storage/model"
)
func (db *DatabasePostgreSQL) GetAllGames() ([]*model.Game, error) {
q := `
SELECT g.id, g.server_id, g.user_id, g.created_at, g.updated_at
FROM public.game g
`
rows, err := db.session.Query(q)
if err != nil {
return nil, err
}
defer rows.Close()
games := make([]*model.Game, 0)
for rows.Next() {
server := model.Server{}
user := model.User{}
game := model.Game{
Server: server,
}
err := rows.Scan(&game.ID, &server.ID, &user.ID, &game.CreatedAt, &game.UpdatedAt)
if err != nil {
return nil, err
}
games = append(games, &game)
}
return games, nil
}
func (db *DatabasePostgreSQL) GetGameById(id string) (*model.Game, error) {
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(game *model.Game) error {
q := `
INSERT INTO public.game
(server_id, user_id)
VALUES
($1, $2)
RETURNING id, created_at
`
err := db.session.
QueryRow(q, game.Server.ID, game.User.ID).
Scan(&game.ID, &game.CreatedAt)
if errPq, ok := err.(*pq.Error); ok {
return handlePgError(errPq)
}
return err
}
func (db *DatabasePostgreSQL) DeleteGame(id string) error {
q := `
DELETE FROM public.game
WHERE id = $1
`
_, err := db.session.Exec(q, id)
if errPq, ok := err.(*pq.Error); ok {
return handlePgError(errPq)
}
return err
}
func (db *DatabasePostgreSQL) UpdateGame(*model.Game) error {
return nil
}