Add /rover command to get rover info

This commit is contained in:
Marc Di Luzio 2020-06-05 22:23:01 +01:00
parent e2e0256d44
commit 9d57f48f98
6 changed files with 145 additions and 9 deletions

View file

@ -48,6 +48,11 @@ var Routes = []Route{
method: http.MethodPost,
handler: HandleRadar,
},
{
path: "/rover",
method: http.MethodPost,
handler: HandleRover,
},
}
// HandleStatus handles the /status request
@ -181,3 +186,34 @@ func HandleRadar(s *Server, b io.ReadCloser, w io.Writer) (interface{}, error) {
return response, nil
}
// HandleRover handles the rover request
func HandleRover(s *Server, b io.ReadCloser, w io.Writer) (interface{}, error) {
var response = rove.RoverResponse{
Success: false,
}
var data rove.RoverData
if err := json.NewDecoder(b).Decode(&data); err != nil {
fmt.Printf("Failed to decode json: %s\n", err)
response.Error = err.Error()
} else if len(data.Id) == 0 {
response.Error = "No account ID provided"
} else if id, err := uuid.Parse(data.Id); err != nil {
response.Error = fmt.Sprintf("Provided account ID was invalid: %s", err)
} else if inst, err := s.accountant.GetRover(id); err != nil {
response.Error = fmt.Sprintf("Provided account has no rover: %s", err)
} else if pos, err := s.world.RoverPosition(inst); err != nil {
response.Error = fmt.Sprintf("Error getting radar from rover: %s", err)
} else {
response.Position = pos
response.Success = true
}
return response, nil
}