diff --git a/AsbCloudApp/Services/ITimeZoneService.cs b/AsbCloudApp/Services/ITimeZoneService.cs index 3eae4ca7..55e18a6a 100644 --- a/AsbCloudApp/Services/ITimeZoneService.cs +++ b/AsbCloudApp/Services/ITimeZoneService.cs @@ -15,7 +15,7 @@ namespace AsbCloudApp.Services /// /// /// - SimpleTimezoneDto GetByCoordinates(double latitude, double longitude); + SimpleTimezoneDto? GetOrDefaultByCoordinates(double latitude, double longitude); /// /// по координатам @@ -24,6 +24,6 @@ namespace AsbCloudApp.Services /// /// /// - Task GetByCoordinatesAsync(double latitude, double longitude, CancellationToken token); + Task GetOrDefaultByCoordinatesAsync(double latitude, double longitude, CancellationToken token); } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/TimeZoneService.cs b/AsbCloudInfrastructure/Services/TimeZoneService.cs index a4f4f0e3..083e8d52 100644 --- a/AsbCloudInfrastructure/Services/TimeZoneService.cs +++ b/AsbCloudInfrastructure/Services/TimeZoneService.cs @@ -11,26 +11,26 @@ namespace AsbCloudInfrastructure.Services { private class TimeZoneInfo { - public string Sunrise { get; set; } + public string? Sunrise { get; set; } public double Lng { get; set; } public double Lat { get; set; } - public string CountryCode { get; set; } + public string? CountryCode { get; set; } public double GmtOffset { get; set; } public double RawOffset { get; set; } - public string Sunset { get; set; } - public string TimezoneId { get; set; } + public string? Sunset { get; set; } + public string? TimezoneId { get; set; } public double DstOffset { get; set; } - public string CountryName { get; set; } - public string Time { get; set; } + public string? CountryName { get; set; } + public string? Time { get; set; } } private const string timezoneApiUrl = "http://api.geonames.org/timezoneJSON"; private const string timezoneApiUserName = "asbautodrilling"; - public SimpleTimezoneDto GetByCoordinates(double latitude, double longitude) - => GetByCoordinatesAsync(latitude, longitude, default).Result; + public SimpleTimezoneDto? GetOrDefaultByCoordinates(double latitude, double longitude) + => GetOrDefaultByCoordinatesAsync(latitude, longitude, default).Result; - public async Task GetByCoordinatesAsync(double latitude, double longitude, CancellationToken token) + public async Task GetOrDefaultByCoordinatesAsync(double latitude, double longitude, CancellationToken token) { var lat = latitude.ToString(System.Globalization.CultureInfo.InvariantCulture); var lng = longitude.ToString(System.Globalization.CultureInfo.InvariantCulture); @@ -55,6 +55,9 @@ namespace AsbCloudInfrastructure.Services }; var timezoneInfo = JsonSerializer.Deserialize(responseJson, options); + if(timezoneInfo is null) + return null; + return new SimpleTimezoneDto { Hours = timezoneInfo.DstOffset, diff --git a/AsbCloudInfrastructure/Services/WellService.cs b/AsbCloudInfrastructure/Services/WellService.cs index eea16706..20486a64 100644 --- a/AsbCloudInfrastructure/Services/WellService.cs +++ b/AsbCloudInfrastructure/Services/WellService.cs @@ -326,7 +326,7 @@ namespace AsbCloudInfrastructure.Services if (point.Latitude is not null & point.Longitude is not null) { - var timezone = timezoneService.GetByCoordinates(point.Latitude!.Value, point.Longitude!.Value); + var timezone = timezoneService.GetOrDefaultByCoordinates(point.Latitude!.Value, point.Longitude!.Value); if (timezone is not null) { return timezone; diff --git a/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs index 153de97f..83875eb1 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs @@ -34,9 +34,9 @@ namespace AsbCloudWebApi.Tests.ServicesTests telemetryTracker = new Mock(); timezoneService = new Mock(); - timezoneService.Setup(s => s.GetByCoordinatesAsync(It.IsAny(), It.IsAny(), It.IsAny())) + timezoneService.Setup(s => s.GetOrDefaultByCoordinatesAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(Task.FromResult(timezone)); - timezoneService.Setup(s => s.GetByCoordinates(It.IsAny(), It.IsAny())) + timezoneService.Setup(s => s.GetOrDefaultByCoordinates(It.IsAny(), It.IsAny())) .Returns(timezone); context = TestHelpter.MakeRealTestContext();