mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-12 03:05:14 +00:00
ship updated postcode api
This commit is contained in:
@@ -12,7 +12,8 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
PostcodeAPI = "https://api.postcodes.io/postcodes/"
|
||||
PostcodeAPI = "https://api.postcodes.io/postcodes/"
|
||||
RandomPostcodeURL = "https://api.postcodes.io/random/postcodes"
|
||||
)
|
||||
|
||||
type Postcode struct{}
|
||||
@@ -52,3 +53,64 @@ func (e *Postcode) Lookup(ctx context.Context, req *pb.LookupRequest, rsp *pb.Lo
|
||||
rsp.Ward = result["admin_ward"].(string)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *Postcode) Validate(ctx context.Context, req *pb.ValidateRequest, rsp *pb.ValidateResponse) error {
|
||||
if len(req.Postcode) == 0 {
|
||||
return errors.BadRequest("postcode.validate", "missing postcode")
|
||||
}
|
||||
|
||||
resp, err := http.Get(PostcodeAPI + req.Postcode + "/validate")
|
||||
if err != nil {
|
||||
logger.Errorf("Failed to http call %v: %v", PostcodeAPI+req.Postcode+"/validate", err.Error())
|
||||
return errors.BadRequest("postcode.validate", "failed to validate postcode")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
b, _ := ioutil.ReadAll(resp.Body)
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
logger.Errorf("Failed to http call (%v) %v: %v", resp.StatusCode, PostcodeAPI+req.Postcode+"/validate", string(b))
|
||||
return errors.BadRequest("postcode.validate", "failed to validate postcode")
|
||||
}
|
||||
|
||||
var response map[string]interface{}
|
||||
if err := json.Unmarshal(b, &response); err != nil {
|
||||
logger.Error("Failed to unmarshal %v: %v", PostcodeAPI+req.Postcode+"/validate", err.Error())
|
||||
return errors.BadRequest("postcode.validate", "failed to validate postcode")
|
||||
}
|
||||
result := response["result"].(bool)
|
||||
rsp.Valid = result
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *Postcode) Random(ctx context.Context, req *pb.RandomRequest, rsp *pb.RandomResponse) error {
|
||||
resp, err := http.Get(RandomPostcodeURL)
|
||||
if err != nil {
|
||||
logger.Errorf("Failed to http call %v: %v", RandomPostcodeURL, err.Error())
|
||||
return errors.BadRequest("postcode.random", "failed to lookup random postcode")
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
b, _ := ioutil.ReadAll(resp.Body)
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
logger.Errorf("Failed to http call (%v) %v: %v", resp.StatusCode, RandomPostcodeURL, string(b))
|
||||
return errors.BadRequest("postcode.random", "failed to lookup rabdom postcode")
|
||||
}
|
||||
|
||||
var response map[string]interface{}
|
||||
if err := json.Unmarshal(b, &response); err != nil {
|
||||
logger.Error("Failed to unmarshal %v: %v", RandomPostcodeURL, err.Error())
|
||||
return errors.BadRequest("postcode.random", "failed to lookup random postcode")
|
||||
}
|
||||
result := response["result"].(map[string]interface{})
|
||||
|
||||
rsp.Postcode = result["postcode"].(string)
|
||||
rsp.Country = result["country"].(string)
|
||||
rsp.Region = result["region"].(string)
|
||||
rsp.Latitude = result["latitude"].(float64)
|
||||
rsp.Longitude = result["longitude"].(float64)
|
||||
rsp.District = result["admin_district"].(string)
|
||||
rsp.Ward = result["admin_ward"].(string)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user