Files
hamster-tycoon/storage/dao/postgresql/database_postgresql_cages.go
2020-05-17 00:06:59 +02:00

92 lines
1.8 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() ([]*model.Cage, error) {
q := `
SELECT c.id, created_at, updated_at, game_id
FROM public.Cage c
`
rows, err := db.session.Query(q)
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(id string) (*model.Cage, error) {
q := `
SELECT c.id, created_at, updated_at, game_id
FROM public.Cage c
WHERE c.id = $1
`
row := db.session.QueryRow(q, id)
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
}