public async Task FetchAndSavePackageRoutes(ValueRetailVillage village) { var httpRequest = new ValueRetailCommanRequestModel { from = DateTime.UtcNow, cultureCode = village.CultureCode, villageCode = village.VillageCode }; var responseString = await _valueRetailAPI.GetValueRetailAPIData(httpRequest, "Routes", "ShoppingPackage"); ShoppingPackageRouteResponse responseData = new ShoppingPackageRouteResponse(); try { responseData = Mapper <ShoppingPackageRouteResponse> .MapFromJson(responseString.Result); } catch (ArgumentNullException ex) { throw ex; } foreach (var package in responseData.Packages) { var currentPackage = _valueRetailPackageRouteRepository.GetOneByPackageId(package.Package.PackageID); if (currentPackage == null) { foreach (var journey in package.Journeys) { foreach (var route in journey.Routes) { try { currentPackage = _valueRetailPackageRouteRepository.Save(new ValueRetailPackageRoute { VillageId = village.Id, PackageId = package.Package.PackageID, JourneyType = journey.JourneyType, RouteId = route.RouteId, DepartureTime = route.DepartureTime, LinkedRouteId = route.LinkedRouteId, ReturnTime = route.ReturnTime, Name = route.Name, LocationId = route.LocationId, LocationName = route.LocationName, LocationAddress = route.LocationAddress, StopId = route.StopId, StopOrder = route.StopOrder, Latitude = route.Latitude, Longitude = route.Longitude, AdultPrice = route.Prices.Adult == null ? 0 : Convert.ToDecimal(route.Prices.Adult.Price), ChildrenPrice = route.Prices.Children == null ? 0 : Convert.ToDecimal(route.Prices.Children.Price), FamilyPrice = route.Prices.Family == null ? 0 : Convert.ToDecimal(route.Prices.Family.Price), InfantPrice = route.Prices.Infant == null ? 0 : Convert.ToDecimal(route.Prices.Infant.Price), CreatedUtc = DateTime.UtcNow, CreatedBy = Guid.NewGuid(), }); if (route.ReturnStops != null && route.ReturnStops.Count > 0) { foreach (var returnStop in route.ReturnStops) { var currentReturnStop = _valueRetailPackageReturnRepository.Save(new ValueRetailPackageReturn { ValueRetailPackageRouteId = currentPackage.Id, RouteId = returnStop.RouteId, StopId = returnStop.StopId, StopOrder = returnStop.StopOrder, Name = returnStop.Name, LocationId = returnStop.LocationId, LocationName = returnStop.LocationName, LocationAddress = returnStop.LocationAddress, ReturnTime = returnStop.ReturnTime, Latitude = returnStop.Latitude, Longitude = returnStop.Longitude, CreatedUtc = DateTime.UtcNow, CreatedBy = Guid.NewGuid(), }); } } } catch (TaskCanceledException ex) { _logger.Log(LogCategory.Error, ex); } catch (Exception ex) { _logger.Log(LogCategory.Error, new Exception("Failed to save Value Retail Package Routes in Db", ex)); } } } } } }