81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using Microsoft.AspNetCore.Http;
 | 
						|
using POCDistance.DAL;
 | 
						|
using POCDistance.Models;
 | 
						|
using POCDistance.Util;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
 | 
						|
namespace POCDistance.Service
 | 
						|
{
 | 
						|
    public class LocationService : ILocationService
 | 
						|
    {
 | 
						|
        private readonly IHttpContextAccessor _httpContextAccessor;
 | 
						|
        private readonly IDataSourceAdapter _dataAdapter;
 | 
						|
 | 
						|
        public LocationService(IHttpContextAccessor httpContextAccessor, IDataSourceAdapter dataAdapter)
 | 
						|
        {
 | 
						|
            _httpContextAccessor = httpContextAccessor;
 | 
						|
            _dataAdapter = dataAdapter;
 | 
						|
        }
 | 
						|
        public List<LocationModel> GetAll()
 | 
						|
        {
 | 
						|
            var locations = new List<LocationModel>();
 | 
						|
 | 
						|
            if (!string.IsNullOrEmpty(_httpContextAccessor.HttpContext.Session.GetString("LocationData")))
 | 
						|
            {
 | 
						|
                locations = _httpContextAccessor.HttpContext.Session.GetObjectFromJson<List<LocationModel>>("LocationData");
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                locations = _dataAdapter.GetLocations();
 | 
						|
                _httpContextAccessor.HttpContext.Session.SetObjectAsJson("LocationData", locations);
 | 
						|
            }
 | 
						|
            return locations;
 | 
						|
        }
 | 
						|
 | 
						|
        public List<LocationModel> GetManyByZipCode(string zipCode)
 | 
						|
        {
 | 
						|
 | 
						|
            if (!string.IsNullOrWhiteSpace(zipCode) && zipCode.Length > 1)
 | 
						|
            {
 | 
						|
                var locations = GetAll();
 | 
						|
                var query = locations.Where(l => l.ZipCode.StartsWith(zipCode));
 | 
						|
                return query.ToList();
 | 
						|
            }
 | 
						|
            return new List<LocationModel>();
 | 
						|
        }
 | 
						|
 | 
						|
        public LocationModel GetByZipCode(string zipCode)
 | 
						|
        {
 | 
						|
            var _location = GetManyByZipCode(zipCode);
 | 
						|
            return _location.OrderByDescending(l => l.Country).FirstOrDefault();
 | 
						|
        }
 | 
						|
 | 
						|
        public DistanceModel GetDistanceByZipCode(string zipCode1, string zipCode2)
 | 
						|
        {
 | 
						|
            double distance = 0.0;
 | 
						|
            double loc_lat1, loc_long1, loc_lat2, loc_long2;
 | 
						|
            var model = new DistanceModel();
 | 
						|
 | 
						|
            var location1 = GetByZipCode(zipCode1);
 | 
						|
            var location2 = GetByZipCode(zipCode2);
 | 
						|
 | 
						|
            if (location1 != null
 | 
						|
                && location2 != null
 | 
						|
                && double.TryParse(location1.Latitude, out loc_lat1)
 | 
						|
                && double.TryParse(location1.Longitude, out loc_long1)
 | 
						|
                && double.TryParse(location2.Latitude, out loc_lat2)
 | 
						|
                && double.TryParse(location2.Longitude, out loc_long2))
 | 
						|
            {
 | 
						|
                distance = CalculateDistance.GetDistance(loc_lat1, loc_long1, loc_lat2, loc_long2);
 | 
						|
                model.Distance = distance.ToString("0.00");
 | 
						|
                model.FromCity = location1.City;
 | 
						|
                model.ToCity = location2.City;
 | 
						|
                model.Unit = "km";
 | 
						|
            }
 | 
						|
 | 
						|
            return model;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |