add cages and hamsters dao
This commit is contained in:
@@ -23,4 +23,19 @@ type Database interface {
|
|||||||
UpdateGame(*model.Game) error
|
UpdateGame(*model.Game) error
|
||||||
// end: games dao funcs
|
// end: games dao funcs
|
||||||
|
|
||||||
|
// start: cage cages funcs
|
||||||
|
GetAllCages() ([]*model.Cage, error)
|
||||||
|
GetCageById(string) (*model.Cage, error)
|
||||||
|
CreateCage(*model.Cage) error
|
||||||
|
DeleteCage(string) error
|
||||||
|
UpdateCage(*model.Cage) error
|
||||||
|
// end: games dao funcs
|
||||||
|
// start: cage cages funcs
|
||||||
|
GetAllHamsters() ([]*model.Hamster, error)
|
||||||
|
GetHamsterById(string) (*model.Hamster, error)
|
||||||
|
CreateHamster(*model.Hamster) error
|
||||||
|
DeleteHamster(string) error
|
||||||
|
UpdateHamster(*model.Hamster) error
|
||||||
|
// end: games dao funcs
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,66 @@
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
uuid "github.com/satori/go.uuid"
|
||||||
|
"hamster-tycoon/storage/dao"
|
||||||
|
"hamster-tycoon/storage/model"
|
||||||
|
"hamster-tycoon/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
cacheKeyCages = "cages"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (db *DatabaseFake) saveCages(cages []*model.Cage) {
|
||||||
|
data := make([]interface{}, 0)
|
||||||
|
for _, v := range cages {
|
||||||
|
data = append(data, v)
|
||||||
|
}
|
||||||
|
db.save(cacheKeyCages, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) loadCages() []*model.Cage {
|
||||||
|
cages := make([]*model.Cage, 0)
|
||||||
|
b, err := db.Cache.Get(cacheKeyCages)
|
||||||
|
if err != nil {
|
||||||
|
return cages
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(b, &cages)
|
||||||
|
if err != nil {
|
||||||
|
utils.GetLogger().WithError(err).Error("Error while unmarshal fake users")
|
||||||
|
}
|
||||||
|
return cages
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) GetAllCages() ([]*model.Cage, error) {
|
||||||
|
return db.loadCages(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) GetCageById(cageId string) (*model.Cage, error) {
|
||||||
|
cages := db.loadCages()
|
||||||
|
for _, g := range cages {
|
||||||
|
if g.ID == cageId {
|
||||||
|
return g, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, dao.NewDAOError(dao.ErrTypeNotFound, errors.New("cage not found"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) CreateCage(cage *model.Cage) error {
|
||||||
|
cage.ID = uuid.NewV4().String()
|
||||||
|
|
||||||
|
cages := db.loadCages()
|
||||||
|
cages = append(cages, cage)
|
||||||
|
db.saveCages(cages)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) DeleteCage(string) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) UpdateCage(*model.Cage) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1,66 @@
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
uuid "github.com/satori/go.uuid"
|
||||||
|
"hamster-tycoon/storage/dao"
|
||||||
|
"hamster-tycoon/storage/model"
|
||||||
|
"hamster-tycoon/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
cacheKeyHamsters = "hamsters"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (db *DatabaseFake) saveHamsters(hamsters []*model.Hamster) {
|
||||||
|
data := make([]interface{}, 0)
|
||||||
|
for _, v := range hamsters {
|
||||||
|
data = append(data, v)
|
||||||
|
}
|
||||||
|
db.save(cacheKeyHamsters, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) loadHamsters() []*model.Hamster {
|
||||||
|
hamsters := make([]*model.Hamster, 0)
|
||||||
|
b, err := db.Cache.Get(cacheKeyHamsters)
|
||||||
|
if err != nil {
|
||||||
|
return hamsters
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(b, &hamsters)
|
||||||
|
if err != nil {
|
||||||
|
utils.GetLogger().WithError(err).Error("Error while unmarshal fake users")
|
||||||
|
}
|
||||||
|
return hamsters
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) GetAllHamsters() ([]*model.Hamster, error) {
|
||||||
|
return db.loadHamsters(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) GetHamsterById(hamsterId string) (*model.Hamster, error) {
|
||||||
|
hamsters := db.loadHamsters()
|
||||||
|
for _, g := range hamsters {
|
||||||
|
if g.ID == hamsterId {
|
||||||
|
return g, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, dao.NewDAOError(dao.ErrTypeNotFound, errors.New("hamster not found"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) CreateHamster(hamster *model.Hamster) error {
|
||||||
|
hamster.ID = uuid.NewV4().String()
|
||||||
|
|
||||||
|
hamsters := db.loadHamsters()
|
||||||
|
hamsters = append(hamsters, hamster)
|
||||||
|
db.saveHamsters(hamsters)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) DeleteHamster(string) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabaseFake) UpdateHamster(*model.Hamster) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1,91 @@
|
|||||||
package postgresql
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1,120 @@
|
|||||||
package postgresql
|
package postgresql
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"github.com/lib/pq"
|
||||||
|
"hamster-tycoon/storage/dao"
|
||||||
|
"hamster-tycoon/storage/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (db *DatabasePostgreSQL) GetAllHamsters() ([]*model.Hamster, error) {
|
||||||
|
q := `
|
||||||
|
SELECT id, created_at, updated_at, name, number, sexe, age, father_id, mother_id, hunger_level, thirst_level, weight, height, alive, sold, gestation, gestation_period, gestation_cooldown, gestation_father_id
|
||||||
|
FROM public.Hamster h
|
||||||
|
`
|
||||||
|
rows, err := db.session.Query(q)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
hamsters := make([]*model.Hamster, 0)
|
||||||
|
for rows.Next() {
|
||||||
|
hamster := model.Hamster{
|
||||||
|
Mother: &model.Hamster{},
|
||||||
|
Father: &model.Hamster{},
|
||||||
|
GestationFather: &model.Hamster{},
|
||||||
|
}
|
||||||
|
err := rows.Scan(&hamster.ID, &hamster.CreatedAt,
|
||||||
|
&hamster.UpdatedAt, &hamster.Name,
|
||||||
|
&hamster.Number, &hamster.Sexe,
|
||||||
|
&hamster.Age, &hamster.Father.ID,
|
||||||
|
&hamster.Mother.ID, &hamster.HungerLevel,
|
||||||
|
&hamster.ThirstLevel, &hamster.Weight,
|
||||||
|
&hamster.Height, &hamster.Alive,
|
||||||
|
&hamster.Sold, &hamster.Gestation,
|
||||||
|
&hamster.GestationPeriod, &hamster.GestationCooldown,
|
||||||
|
&hamster.GestationFather.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hamsters = append(hamsters, &hamster)
|
||||||
|
}
|
||||||
|
return hamsters, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabasePostgreSQL) GetHamsterById(id string) (*model.Hamster, error) {
|
||||||
|
q := `
|
||||||
|
SELECT id, created_at, updated_at, name, number, sexe, age, father_id, mother_id, hunger_level, thirst_level, weight, height, alive, sold, gestation, gestation_period, gestation_cooldown, gestation_father_id
|
||||||
|
FROM public.Hamster h
|
||||||
|
WHERE c.id = $1
|
||||||
|
`
|
||||||
|
row := db.session.QueryRow(q, id)
|
||||||
|
|
||||||
|
hamster := model.Hamster{
|
||||||
|
Mother: &model.Hamster{},
|
||||||
|
Father: &model.Hamster{},
|
||||||
|
GestationFather: &model.Hamster{},
|
||||||
|
}
|
||||||
|
err := row.Scan(&hamster.ID, &hamster.CreatedAt,
|
||||||
|
&hamster.UpdatedAt, &hamster.Name,
|
||||||
|
&hamster.Number, &hamster.Sexe,
|
||||||
|
&hamster.Age, &hamster.Father.ID,
|
||||||
|
&hamster.Mother.ID, &hamster.HungerLevel,
|
||||||
|
&hamster.ThirstLevel, &hamster.Weight,
|
||||||
|
&hamster.Height, &hamster.Alive,
|
||||||
|
&hamster.Sold, &hamster.Gestation,
|
||||||
|
&hamster.GestationPeriod, &hamster.GestationCooldown,
|
||||||
|
&hamster.GestationFather.ID)
|
||||||
|
|
||||||
|
if errPq, ok := err.(*pq.Error); ok {
|
||||||
|
return nil, handlePgError(errPq)
|
||||||
|
}
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return nil, dao.NewDAOError(dao.ErrTypeNotFound, err)
|
||||||
|
}
|
||||||
|
return &hamster, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabasePostgreSQL) CreateHamster(hamster *model.Hamster) error {
|
||||||
|
q := `
|
||||||
|
INSERT INTO public.Hamster
|
||||||
|
(name, number, sexe, age, father_id, mother_id, hunger_level, thirst_level, weight, height, alive, sold, gestation, gestation_period, gestation_cooldown, gestation_father_id)
|
||||||
|
VALUES
|
||||||
|
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
|
||||||
|
RETURNING id, created_at
|
||||||
|
`
|
||||||
|
|
||||||
|
err := db.session.
|
||||||
|
QueryRow(q, &hamster.Name,
|
||||||
|
&hamster.Number, &hamster.Sexe,
|
||||||
|
&hamster.Age, &hamster.Father.ID,
|
||||||
|
&hamster.Mother.ID, &hamster.HungerLevel,
|
||||||
|
&hamster.ThirstLevel, &hamster.Weight,
|
||||||
|
&hamster.Height, &hamster.Alive,
|
||||||
|
&hamster.Sold, &hamster.Gestation,
|
||||||
|
&hamster.GestationPeriod, &hamster.GestationCooldown,
|
||||||
|
&hamster.GestationFather.ID).
|
||||||
|
Scan(&hamster.ID, &hamster.CreatedAt)
|
||||||
|
if errPq, ok := err.(*pq.Error); ok {
|
||||||
|
return handlePgError(errPq)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabasePostgreSQL) DeleteHamster(id string) error {
|
||||||
|
q := `
|
||||||
|
DELETE FROM public.Hamster
|
||||||
|
WHERE id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
_, err := db.session.Exec(q, id)
|
||||||
|
if errPq, ok := err.(*pq.Error); ok {
|
||||||
|
return handlePgError(errPq)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DatabasePostgreSQL) UpdateHamster(hamster *model.Hamster) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user