/// <summary> /// Find distance between two airports /// </summary> /// <param name="airportFrom">IATA code airport from</param> /// <param name="airportTo">IATA code airport to</param> /// <returns></returns> public DistanceResultResponseDto FindDistanceBetweenAirports( string airportFrom, string airportTo, EMeasureUnitDto measureUnit = EMeasureUnitDto.Meters) { CheckAirportCode(airportFrom, airportTo); airportTo = airportTo.ToUpperInvariant(); airportFrom = airportFrom.ToUpperInvariant(); if (TryGetFromCache(airportFrom, airportTo, measureUnit, out var cacheResult)) { return(cacheResult); } var airportDataFrom = _gatewayService.GetAirportData(airportFrom); var airportDataTo = _gatewayService.GetAirportData(airportTo); var fromGeoPoint = airportDataFrom.ConvertToGeoPoint(); var toGeoPoint = airportDataTo.ConvertToGeoPoint(); var distance = _getGeoDistanceResolver.ResolveDistance( fromGeoPoint, toGeoPoint, (EMeasureUnit)Enum.Parse(typeof(EMeasureUnit), measureUnit.ToString())); var result = new DistanceResultResponseDto() { Distance = distance, FromAirport = airportDataFrom.ConvertToDto(), ToAirport = airportDataTo.ConvertToDto() }; SaveToCache(airportFrom, airportTo, measureUnit, result); return(result); }
private void SaveToCache(string airportFrom, string airportTo, EMeasureUnitDto measureUnit, DistanceResultResponseDto result) { _memoryCache.Set( GetKey(airportFrom, airportTo, measureUnit), result, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(5))); }
private bool TryGetFromCache(string airportFrom, string airportTo, EMeasureUnitDto measureUnit, out DistanceResultResponseDto resultCache) { var key = GetKey(airportFrom, airportTo, measureUnit); if (_memoryCache.TryGetValue(key, out var result)) { resultCache = (DistanceResultResponseDto)result; return(true); } resultCache = null; return(false); }