37 lines
726 B
Go
37 lines
726 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 pokemon Pokemon
|
|
result := r.db.Find(&pokemon, "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 pokemon, 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
|
|
}
|