protected override async Task Handle(ShoppingPackageCommand command) { var villages = _valueRetailVillageRepository.GetAll(); foreach (var village in villages) { ValueRetailCommanRequestModel ValueRetailCommanRequestModel = new ValueRetailCommanRequestModel { cultureCode = village.CultureCode, villageCode = village.VillageCode, from = DateTime.UtcNow }; var routeResonseString = await _valueRetailAPI.GetValueRetailAPIData(ValueRetailCommanRequestModel, "Routes", "ShoppingPackage"); if (routeResonseString.Success == true) { ShoppingPackageRouteResponse shoppingPackageRouteResponse = Mapper <ShoppingPackageRouteResponse> .MapFromJson(routeResonseString.Result); foreach (var package in shoppingPackageRouteResponse.Packages) { if (package.Package.PackageID == 367 || package.Package.PackageID == 366 || package.Package.PackageID == 368) { continue; } ValueRetailCommanRequestModel httpRequest = new ValueRetailCommanRequestModel { from = DateTime.UtcNow, to = DateTime.UtcNow.AddYears(1), packageId = package.Package.PackageID, cultureCode = village.CultureCode, villageCode = village.VillageCode }; var routeDetailResponseString = await _valueRetailAPI.GetValueRetailAPIData(httpRequest, "RouteDetails", "ShoppingPackage"); ShoppingPackageRouteDetail shoppingPackageRouteDetail = Mapper <ShoppingPackageRouteDetail> .MapFromJson(routeDetailResponseString.Result); if (shoppingPackageRouteDetail.RequestStatus.Success) { var @event = SaveToEvent(shoppingPackageRouteDetail, village); if (!objectComparersFactory.GetObjectsComparer <Event>().Compare(@event, new Event())) { var cityAndCurrency = await SaveCityStateCountry(shoppingPackageRouteDetail, village); var eventVenueMapping = SaveToVenue(shoppingPackageRouteDetail, @event, cityAndCurrency, village); SaveDepartureLocations(shoppingPackageRouteDetail, eventVenueMapping); var eventDetail = SaveToEventDetails(shoppingPackageRouteDetail, eventVenueMapping, @event); SaveBlockedDates(shoppingPackageRouteDetail, @event, eventDetail); SaveTicketDetail(shoppingPackageRouteDetail, eventDetail, cityAndCurrency); } else { throw new TaskCanceledException("Data insertion for Value Retail Package failed!"); } } } } } }
public async Task <IResponse <string> > GetValueRetailAPIData(ValueRetailCommanRequestModel valueRetailCommanRequestModel, string apiRoute, string productName) { var _accessToken = await _valueRetailAuth.GetToken(); var builder = new UriBuilder($"https://data0integration0prep0neu.azure-api.net/opdconnect/api/{productName}/{apiRoute}"); builder.Port = -1; var query = HttpUtility.ParseQueryString(builder.Query); PropertyInfo[] properties = valueRetailCommanRequestModel.GetType().GetProperties(); foreach (var property in properties) { if (property.GetValue(valueRetailCommanRequestModel) != null) { if (property.PropertyType == typeof(DateTime?)) { var attr = property.Name.ToString().StartsWith("@") ? property.Name.ToString().Substring(1) : property.Name.ToString(); query[attr] = DateTime.UtcNow.ToString("s", CultureInfo.InvariantCulture); continue; } query[property.Name.ToString()] = property.GetValue(valueRetailCommanRequestModel).ToString(); } } query["aggregatorId"] = "SDK"; query["otaId"] = "INT00065"; builder.Query = query.ToString(); string endpoint = builder.ToString(); var responseData = string.Empty; try { using (HttpClient httpClient = new HttpClient()) { httpClient.Timeout = TimeSpan.FromMinutes(5); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Ocp-Apim-Subscription-Key", "8ace1302001848ed9a311fca09ef8909"); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json"); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken.Result); var response = await httpClient.GetAsync(new Uri(endpoint)); responseData = await response.Content.ReadAsStringAsync(); } return(GetResponse(true, responseData)); } catch (HttpRequestException ex) { _logger.Log(LogCategory.Error, ex); return(GetResponse(false, null)); } catch (Exception ex) { _logger.Log(LogCategory.Error, new Exception("Failed to fetch Chauffeur Driven data for Value Retail", ex)); return(GetResponse(false, null)); } }
protected override async Task Handle(ChauffeurDrivenCommand command) { var villages = _valueRetailVillageRepository.GetAll(); foreach (var village in villages) { var httpRequest = new ValueRetailCommanRequestModel { from = DateTime.UtcNow, cultureCode = village.CultureCode, villageCode = village.VillageCode }; var routeResponseString = await _valueRetailAPI.GetValueRetailAPIData(httpRequest, "Routes", "ChauffeurDriven"); ChauffeurDrivenRouteResponse chauffeurDrivenRouteResponse = Mapper <ChauffeurDrivenRouteResponse> .MapFromJson(routeResponseString.Result); if (chauffeurDrivenRouteResponse.RequestStatus.Success) { foreach (var route in chauffeurDrivenRouteResponse.Routes) { var @event = SaveToEvent(route, village); if (objectComparersFactory.GetObjectsComparer <Event>().Compare(@event, new Event())) { throw new TaskCanceledException("Data Insertion Failed for Value Retail Chauffeur Drive."); } else { var cityAndCurrency = await SaveCityStateCountry(route, village); var eventVenueMapping = SaveToVenue(route, @event, cityAndCurrency); SaveDepartureLocations(route, eventVenueMapping); var eventDetail = SaveToEventDetails(@event, eventVenueMapping); SaveTicketDetail(route, eventDetail, cityAndCurrency); SaveBlockedDates(route, @event, eventDetail); } } } } }
public async Task FetchAndSaveRoutes(ValueRetailVillage village) { var httpRequest = new ValueRetailCommanRequestModel { villageCode = village.VillageCode }; var responseString = await _valueRetailAPI.GetValueRetailAPIData(httpRequest, "Journeys", "ShoppingExpress"); ShoppingExpressJourney responseData = new ShoppingExpressJourney(); try { responseData = Mapper <ShoppingExpressJourney> .MapFromJson(responseString.Result); } catch (ArgumentNullException ex) { throw ex; } foreach (var journey in responseData.Journeys) { foreach (var route in journey.Routes) { try { var currentRoute = _valueRetailRouteRepository.GetByRouteIdStopIdLinkedRouteId(route.RouteId, route.StopId, route.LinkedRouteId); if (currentRoute == null) { currentRoute = _valueRetailRouteRepository.Save(new ValueRetailRoute { VillageId = village.Id, 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), UnitPrice = route.Prices.Unit == null ? 0 : Convert.ToDecimal(route.Prices.Unit.Price), CreatedUtc = DateTime.UtcNow, CreatedBy = Guid.NewGuid(), }); if (route.ReturnStops != null && route.ReturnStops.Count > 0) { foreach (var returnStop in route.ReturnStops) { var currentReturnStop = _valueRetailReturnStopsRepository.Save(new ValueRetailReturnStop { ValueRetailRouteId = currentRoute.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 Routes in Db", ex)); } } } }