コード例 #1
0
        /// <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);
        }
コード例 #2
0
 private void SaveToCache(string airportFrom, string airportTo, EMeasureUnitDto measureUnit, DistanceResultResponseDto result)
 {
     _memoryCache.Set(
         GetKey(airportFrom, airportTo, measureUnit),
         result,
         new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(5)));
 }
コード例 #3
0
        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);
        }