public async Task <Models.ActionResult <SearchResult> > Search(TrackingSearcher searcher) { Models.ActionResult <SearchResult> result = null; try { if (searcher != null && ModelState.IsValid) { var searchResult = await TrackingManager.Search(searcher); result = new Models.ActionResult <SearchResult>(HttpStatusCode.OK, searchResult); } else { result = searcher == null ? new Models.ActionResult <SearchResult>(HttpStatusCode.BadRequest, "Search parameters are required") : new Models.ActionResult <SearchResult>(HttpStatusCode.BadRequest, ModelState); } } catch (ArgumentException ex) { result = new Models.ActionResult <SearchResult>(HttpStatusCode.BadRequest, ex.Message); // In the case of argument exception we will be getting meaning full error message. } catch (Exception) { result = new Models.ActionResult <SearchResult>(HttpStatusCode.InternalServerError, $"Internal server error has accured while searching tracking records for the vehicle:{searcher?.VehicleID}"); // no need to share implementation details with the consumer. } return(result); }
public async Task <SearchResult> Search(TrackingSearcher searcher) { try { var result = await _trackingRepository.Search(searcher); for (int i = 0; i < result.Path.Length; i++) { result.Path[i].Address = await ReverseGeocode(result.Path[i].Lat, result.Path[i].Long); } return(result); } catch (Exception ex) { Logger.LogError(ex, $"Error accured while searching tracking data for VehicleID:{searcher.VehicleID} from {(new DateTime(searcher.StartTime)).ToLongDateString()} to {(new DateTime(searcher.EndTime)).ToLongDateString()}"); throw; } }