pokedex_cli/command_map.go

51 lines
1.1 KiB
Go

package main
import (
"fmt"
"net/http"
"encoding/json"
"io"
"k3gtpi.jumpingcrab.com/go-learning/pokedexcli/internal/pokecache"
)
func commandMap(p *PokedexConfig, c *pokecache.Cache) error {
var baseUrl string
if p.Next == nil {
baseUrl = "https://pokeapi.co/api/v2/location-area/"
} else {
baseUrl = *p.Next
}
var body []byte
// Check if respones is available in cache
if resp, exists := c.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)
}
c.Add(baseUrl, body)
}
if err := json.Unmarshal(body, &p); err != nil {
return fmt.Errorf("could not unmarshal response! Err: %w", err)
}
for _, location := range p.Results {
fmt.Println(location["name"])
}
return nil
}