37 lines
717 B
Go
37 lines
717 B
Go
package pokemon
|
|
|
|
import (
|
|
"fmt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Repo struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewRepo(db *gorm.DB) Repo {
|
|
return Repo{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (r Repo) Find(name string) (pokemon, error) {
|
|
var poke pokemon
|
|
result := r.db.Find(&poke, "name = ?", name) // .First() generates an error if none found
|
|
if result.Error != nil {
|
|
return pokemon{}, fmt.Errorf("Unable to retrive pokemon named %s: %w", name, result.Error)
|
|
}
|
|
|
|
return poke, nil
|
|
}
|
|
|
|
func (r Repo) FindAll() ([]pokemon, error) {
|
|
var pokemons []pokemon
|
|
result := r.db.Model(&pokemon{}).Preload("Moves").Find(&pokemons)
|
|
if result.Error != nil {
|
|
return nil, fmt.Errorf("Unable to retrive pokemons: %w", result.Error)
|
|
}
|
|
|
|
return pokemons, nil
|
|
}
|