pokedex_cli/command_map.go

49 lines
1.1 KiB
Go

package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
func commandMap(p *PokedexConfig, a *string) error {
var baseUrl string
if p.LocationData.Next == nil {
baseUrl = "https://pokeapi.co/api/v2/location-area/"
} else {
baseUrl = *p.LocationData.Next
}
var body []byte
// Check if respones is available in cache
if resp, exists := p.Cache.Get(baseUrl); exists {
body = resp
} else {
client := &http.Client{}
resp, err := client.Get(baseUrl)
if err != nil {
return fmt.Errorf("could not make request to Pokedex API! Err: %w", err)
}
body, err = io.ReadAll(resp.Body)
defer resp.Body.Close()
if resp.StatusCode > 299 {
return fmt.Errorf("request returned non-200 code! Code: %v Body: %v", resp.StatusCode, body)
}
if err != nil {
return fmt.Errorf("could not read request body! Err: %w", err)
}
p.Cache.Add(baseUrl, body)
}
if err := json.Unmarshal(body, &p.LocationData); err != nil {
return fmt.Errorf("could not unmarshal response! Err: %w", err)
}
for _, location := range p.LocationData.Locations {
fmt.Println(location["name"])
}
return nil
}