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 }