|
|
- 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;
- }
- }
- }
|