From dc156154b0311adec6c3adcf26bef7c74d15d68d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Mon, 27 Sep 2021 16:47:16 +0500 Subject: [PATCH] hotfix telemetryService get Id. UDO this when cache table done --- .../Services/TelemetryService.cs | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs index 93c85cb3..bdb720cd 100644 --- a/AsbCloudInfrastructure/Services/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryService.cs @@ -3,6 +3,7 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; using Mapster; +using System.Linq; namespace AsbCloudInfrastructure.Services { @@ -10,11 +11,13 @@ namespace AsbCloudInfrastructure.Services { private readonly CacheTable cacheTelemetry; private readonly CacheTable cacheWells; + private readonly IAsbCloudDbContext db; public TelemetryService(IAsbCloudDbContext db, CacheDb cacheDb) { cacheTelemetry = cacheDb.GetCachedTable((AsbCloudDbContext)db); cacheWells = cacheDb.GetCachedTable((AsbCloudDbContext)db); + this.db = db; } public int GetOrCreateTemetryIdByUid(string uid) @@ -51,9 +54,25 @@ namespace AsbCloudInfrastructure.Services return cacheWells.FirstOrDefault(w => w?.IdTelemetry == tele.Id); } - private Telemetry GetOrCreateTelemetryByUid(string uid) - => cacheTelemetry.FirstOrDefault(t => t.RemoteUid == uid) - ?? cacheTelemetry.Insert(new Telemetry { RemoteUid = uid, }); + // TODO: fix cacheTable before uncomment next + //private Telemetry GetOrCreateTelemetryByUid(string uid) + // => cacheTelemetry.FirstOrDefault(t => t.RemoteUid == uid) + // ?? cacheTelemetry.Insert(new Telemetry { RemoteUid = uid, }); + private Telemetry GetOrCreateTelemetryByUid(string uid) + { + var telemetry = cacheTelemetry.FirstOrDefault(t => t.RemoteUid == uid); + if (telemetry is not null) + return telemetry; + + telemetry = db.Telemetries.OrderBy(t=>t.Info).FirstOrDefault(t => t.RemoteUid == uid); + if (telemetry is not null) + return telemetry; + + var newTelemetryEntry = db.Telemetries.Add(new Telemetry { RemoteUid = uid }); + db.SaveChanges(); + cacheTelemetry.Refresh(); + return newTelemetryEntry.Entity; + } } }