93 lines
1.9 KiB
Go
Executable File
93 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) GetAllCages(gameID string) ([]*model.Cage, error) {
|
|
q := `
|
|
SELECT c.id, created_at, updated_at, game_id
|
|
FROM public.Cage c
|
|
WHERE c.game_id=$1
|
|
`
|
|
rows, err := db.session.Query(q, gameID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
cages := make([]*model.Cage, 0)
|
|
for rows.Next() {
|
|
game := model.Game{}
|
|
cage := model.Cage{
|
|
Game: game,
|
|
}
|
|
err := rows.Scan(&cage.ID, &cage.CreatedAt, &cage.UpdatedAt, &game.ID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
cages = append(cages, &cage)
|
|
}
|
|
return cages, nil
|
|
}
|
|
|
|
func (db *DatabasePostgreSQL) GetCageByID(gameID, cageID string) (*model.Cage, error) {
|
|
q := `
|
|
SELECT c.id, created_at, updated_at, game_id
|
|
FROM public.Cage c
|
|
WHERE c.game_id=$1 and c.id = $2
|
|
`
|
|
row := db.session.QueryRow(q, gameID, cageID)
|
|
|
|
game := model.Game{}
|
|
cage := model.Cage{
|
|
Game: game,
|
|
}
|
|
err := row.Scan(&cage.ID, &cage.CreatedAt, &cage.UpdatedAt, &game.ID)
|
|
if errPq, ok := err.(*pq.Error); ok {
|
|
return nil, handlePgError(errPq)
|
|
}
|
|
if err == sql.ErrNoRows {
|
|
return nil, dao.NewDAOError(dao.ErrTypeNotFound, err)
|
|
}
|
|
return &cage, err
|
|
}
|
|
|
|
func (db *DatabasePostgreSQL) CreateCage(cage *model.Cage) error {
|
|
q := `
|
|
INSERT INTO public.Cage
|
|
(game_id)
|
|
VALUES
|
|
($1)
|
|
RETURNING id, created_at
|
|
`
|
|
|
|
err := db.session.
|
|
QueryRow(q, cage.Game.ID).
|
|
Scan(&cage.ID, &cage.CreatedAt)
|
|
if errPq, ok := err.(*pq.Error); ok {
|
|
return handlePgError(errPq)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (db *DatabasePostgreSQL) DeleteCage(id string) error {
|
|
q := `
|
|
DELETE FROM public.Cage
|
|
WHERE id = $1
|
|
`
|
|
|
|
_, err := db.session.Exec(q, id)
|
|
if errPq, ok := err.(*pq.Error); ok {
|
|
return handlePgError(errPq)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (db *DatabasePostgreSQL) UpdateCage(cage *model.Cage) error {
|
|
return nil
|
|
}
|