func decodeRequestRoutesRequest(_ context.Context, r *http.Request) (interface{}, error) { vars := mux.Vars(r) id, ok := vars["id"] if !ok { return nil, errBadRoute } return requestRoutesRequest{ID: cargo.TrackingID(id)}, nil }
func decodeLoadCargoRequest(r *http.Request) (interface{}, error) { vars := mux.Vars(r) id, ok := vars["id"] if !ok { return nil, errBadRoute } return loadCargoRequest{ID: cargo.TrackingID(id)}, nil }
func (s *service) Track(id string) (Cargo, error) { if id == "" { return Cargo{}, ErrInvalidArgument } c, err := s.cargos.Find(cargo.TrackingID(id)) if err != nil { return Cargo{}, err } return assemble(c, s.handlingEvents), nil }
func decodeAssignToRouteRequest(_ context.Context, r *http.Request) (interface{}, error) { vars := mux.Vars(r) id, ok := vars["id"] if !ok { return nil, errBadRoute } var itinerary cargo.Itinerary if err := json.NewDecoder(r.Body).Decode(&itinerary); err != nil { return nil, err } return assignToRouteRequest{ ID: cargo.TrackingID(id), Itinerary: itinerary, }, nil }
func decodeChangeDestinationRequest(_ context.Context, r *http.Request) (interface{}, error) { vars := mux.Vars(r) id, ok := vars["id"] if !ok { return nil, errBadRoute } var body struct { Destination string `json:"destination"` } if err := json.NewDecoder(r.Body).Decode(&body); err != nil { return nil, err } return changeDestinationRequest{ ID: cargo.TrackingID(id), Destination: location.UNLocode(body.Destination), }, nil }
func decodeRegisterIncidentRequest(_ context.Context, r *http.Request) (interface{}, error) { var body struct { CompletionTime time.Time `json:"completion_time"` TrackingID string `json:"tracking_id"` VoyageNumber string `json:"voyage"` Location string `json:"location"` EventType string `json:"event_type"` } if err := json.NewDecoder(r.Body).Decode(&body); err != nil { return nil, err } return registerIncidentRequest{ CompletionTime: body.CompletionTime, ID: cargo.TrackingID(body.TrackingID), Voyage: voyage.Number(body.VoyageNumber), Location: location.UNLocode(body.Location), EventType: stringToEventType(body.EventType), }, nil }