package pokemon import ( "fmt" "git.ssns.se/git/frozendragon/pokemon-go-trade/internal/db" "git.ssns.se/git/frozendragon/pokemon-go-trade/internal/model" ) type Package struct { Db db.Interface } type Interface interface { GetAvailablePokemons() (*Pokemons, error) StoreHavePokemons(pokemons []model.Pokemon) error GetHavePokemons() ([]model.Pokemon, error) CreateWantGroup() error GetWantGroups() ([]model.WantGroup, error) DeleteWantGroups(id int) error AddPokemonWantGroup(wantGroupID int, pokemon model.Pokemon) error } type Pokemons struct { Pokemons []model.Pokemon `json:"pokemons"` } func (p *Package) GetAvailablePokemons() (*Pokemons, error) { dbPokemons, err := p.Db.GetPokemons() if err != nil { return nil, err } var pokemons Pokemons for _, pokemon := range dbPokemons { dexFound := false if pokemon.Region != "" { for i, p := range pokemons.Pokemons { if p.DexNumber == pokemon.DexNumber { pokemons.Pokemons[i].Variations = append(pokemons.Pokemons[i].Variations, model.Pokemon{ ID: pokemon.ID, Name: pokemon.Name, DexNumber: pokemon.DexNumber, Shiny: true, Url: fmt.Sprintf("image/%s", pokemon.ShinyImageName), }) pokemons.Pokemons[i].Variations = append(pokemons.Pokemons[i].Variations, model.Pokemon{ ID: pokemon.ID, Name: pokemon.Name, DexNumber: pokemon.DexNumber, Shiny: false, Url: fmt.Sprintf("image/%s", pokemon.ImageName), }) dexFound = true break } } } if dexFound { continue } if pokemon.ShinyEnabled { pokemons.Pokemons = append(pokemons.Pokemons, model.Pokemon{ ID: pokemon.ID, Name: pokemon.Name, DexNumber: pokemon.DexNumber, Shiny: true, Url: fmt.Sprintf("image/%s", pokemon.ShinyImageName), Variations: []model.Pokemon{ { ID: pokemon.ID, Name: pokemon.Name, DexNumber: pokemon.DexNumber, Shiny: false, Url: fmt.Sprintf("image/%s", pokemon.ImageName), }, }, }) } else { pokemons.Pokemons = append(pokemons.Pokemons, model.Pokemon{ ID: pokemon.ID, DexNumber: pokemon.DexNumber, Shiny: false, Url: fmt.Sprintf("image/%s", pokemon.ImageName), Variations: []model.Pokemon{}, }) } } return &pokemons, nil } func (p *Package) GetHavePokemons() ([]model.Pokemon, error) { pokemons := []model.Pokemon{} dbPokemons, err := p.Db.GetHavePokemons() if err != nil { return nil, err } for _, dbPokemon := range dbPokemons { pokemon := model.Pokemon{ ID: dbPokemon.ID, DexNumber: dbPokemon.DexNumber, Name: dbPokemon.Name, Shiny: dbPokemon.ShinyEnabled, } if dbPokemon.ShinyEnabled { pokemon.Url = dbPokemon.ShinyImageName } else { pokemon.Url = dbPokemon.ImageName } pokemon.FormatUrl() pokemons = append(pokemons, pokemon) } return pokemons, nil } func (p *Package) StoreHavePokemons(pokemons []model.Pokemon) error { var havePokemons []db.HavePokemon for _, pokemon := range pokemons { havePokemons = append(havePokemons, db.HavePokemon{ PokemonID: pokemon.ID, Shiny: pokemon.Shiny, }) } return p.Db.StoreHavePokemons(havePokemons) } func (p *Package) CreateWantGroup() error { return p.Db.CreateWantGroup(model.WantGroup{ GroupName: "want group", }) } func (p *Package) GetWantGroups() ([]model.WantGroup, error) { wantGroups, err := p.Db.GetWantGroups() if err != nil { return nil, err } for i, wantGroup := range wantGroups { dbPokemons, err := p.Db.GetWantPokemonByWantGroup(wantGroup.ID) if err != nil { return nil, err } pokemons := []model.Pokemon{} for _, dbPokemon := range dbPokemons { pokemon := model.Pokemon{ ID: dbPokemon.ID, Name: dbPokemon.Name, DexNumber: dbPokemon.DexNumber, Shiny: true, Url: fmt.Sprintf("image/%s", dbPokemon.ShinyImageName), } pokemons = append(pokemons, pokemon) } wantGroups[i].Pokemons = pokemons } return wantGroups, nil } func (p *Package) DeleteWantGroups(id int) error { return p.Db.DeleteWantGroup(id) } func (p *Package) AddPokemonWantGroup(wantGroupID int, pokemon model.Pokemon) error { return p.Db.CreateWantPokemon(model.WantPokemon{ PokemonID: pokemon.ID, WantGroupID: wantGroupID, Shiny: pokemon.Shiny, }) }