From 6b7f589ddc78e1a5e32058f94243a62e390518e8 Mon Sep 17 00:00:00 2001 From: KharchenkoVladimir Date: Thu, 18 Nov 2021 14:25:11 +0500 Subject: [PATCH] CS2-119: Fixed incoming telemetry date transform --- AsbCloudApp/Services/ITelemetryService.cs | 3 +- .../Services/TelemetryDataBaseService.cs | 10 +-- .../Services/TelemetryService.cs | 70 ++++++++++--------- 3 files changed, 43 insertions(+), 40 deletions(-) diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs index 2eac845f..fbd9c2e5 100644 --- a/AsbCloudApp/Services/ITelemetryService.cs +++ b/AsbCloudApp/Services/ITelemetryService.cs @@ -13,7 +13,8 @@ namespace AsbCloudApp.Services int GetOrCreateTemetryIdByUid(string uid); double GetTimezoneOffsetByTelemetryId(int idTelemetry); Task UpdateInfoAsync(string uid, TelemetryInfoDto info, CancellationToken token); - Task FixDateToTimeZoneAsync(int idTelemetry, DateTime date, + Task GetTelemetryTimeZoneOffsetAsync(int idTelemetry, CancellationToken token); + DateTime FixDateToTimeZone(DateTime date, double offsetHours, CancellationToken token); Task FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result, CancellationToken token); diff --git a/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs index c39ea5ab..b1cf029d 100644 --- a/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs @@ -59,17 +59,17 @@ namespace AsbCloudInfrastructure.Services foreach (var duplicate in duplicates) dtosList.Remove(duplicate); } + + var offsetHours = await telemetryService.GetTelemetryTimeZoneOffsetAsync(idTelemetry, token); - var tasks = dtosList.Select(async d => { + var entities = dtosList.Select(d => { var e = Convert(d); e.IdTelemetry = idTelemetry; - e.Date = await telemetryService.FixDateToTimeZoneAsync(idTelemetry, d.Date, token) - .ConfigureAwait(false); + if(offsetHours is not null) + e.Date = telemetryService.FixDateToTimeZone(d.Date, (double)offsetHours, token); return e; }); - var entities = await Task.WhenAll(tasks); - var dbset = db.Set(); try { diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs index 1adf88d7..9acb53b5 100644 --- a/AsbCloudInfrastructure/Services/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryService.cs @@ -31,6 +31,8 @@ namespace AsbCloudInfrastructure.Services { cacheTelemetry = cacheDb.GetCachedTable((AsbCloudDbContext)db); cacheWells = cacheDb.GetCachedTable((AsbCloudDbContext)db); + cacheClusters = cacheDb.GetCachedTable((AsbCloudDbContext)db); + cacheDeposits = cacheDb.GetCachedTable((AsbCloudDbContext)db); this.db = db; this.telemetryTracker = telemetryTracker; } @@ -98,47 +100,47 @@ namespace AsbCloudInfrastructure.Services await cacheTelemetry.UpsertAsync(telemetry, token) .ConfigureAwait(false); } - - public async Task FixDateToTimeZoneAsync(int idTelemetry, DateTime date, - CancellationToken token) - { - if(date.Kind == DateTimeKind.Utc) - return date; - - if (date.Kind == DateTimeKind.Local) - return date.ToUniversalTime(); + public async Task GetTelemetryTimeZoneOffsetAsync(int idTelemetry, CancellationToken token) + { var telemetry = await cacheTelemetry.FirstOrDefaultAsync(t => t.Id == idTelemetry, token); - - if (telemetry is null) - return date; - if (telemetry.TelemetryTimeZone is null) + if (telemetry.TelemetryTimeZone is not null) + return telemetry.TelemetryTimeZone.Hours; + + var well = await cacheWells.FirstOrDefaultAsync(w => w.IdTelemetry == telemetry.Id, token) + .ConfigureAwait(false); + + if (well is null) + return null; + + var requestedTimeZoneInfo = await GetTimeZoneInfoAsync(well.Id, token) + .ConfigureAwait(false); + + if (requestedTimeZoneInfo.TimezoneId is null) + return null; + + telemetry.TelemetryTimeZone = new TelemetryTimeZone() { - var well = await cacheWells.FirstOrDefaultAsync(w => w.IdTelemetry == telemetry.Id, token) - .ConfigureAwait(false); - - if (well is null) - return date; - - var requestedTimeZoneInfo = await GetTimeZoneInfoAsync(well.Id, token) - .ConfigureAwait(false); + Hours = requestedTimeZoneInfo.GmtOffset, + TimeZoneId = requestedTimeZoneInfo.TimezoneId + }; - if (requestedTimeZoneInfo.TimezoneId is null) - return date; - - telemetry.TelemetryTimeZone = new TelemetryTimeZone() - { - Hours = requestedTimeZoneInfo.GmtOffset, - TimeZoneId = requestedTimeZoneInfo.TimezoneId - }; - - await cacheTelemetry.UpsertAsync(telemetry, token).ConfigureAwait(false); - } + await cacheTelemetry.UpsertAsync(telemetry, token).ConfigureAwait(false); - var offsetHours = telemetry.TelemetryTimeZone.Hours; - return date.AddHours(offsetHours * -1); + return telemetry.TelemetryTimeZone.Hours; + } + + public DateTime FixDateToTimeZone(DateTime date, double offsetHours, + CancellationToken token) + { + return date.Kind switch + { + DateTimeKind.Utc => date, + DateTimeKind.Local => date.ToUniversalTime(), + _ => date.AddHours(-offsetHours) + }; } public async Task FixDatesRangeByTimeZoneAsync(int telemetryId, DatesRangeDto result,