using AsbCloudApp.Data; using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; using AutoMapper; using System.Text.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services { public class TelemetryService : ITelemetryService { private readonly IAsbCloudDbContext db; private readonly IMapper mapper; private readonly ICacheTable cacheTelemetry; public TelemetryService(IAsbCloudDbContext db, CacheDb cacheDb, MapperConfiguration mapperConfiguration) { this.db = db; mapper = mapperConfiguration.CreateMapper(); cacheTelemetry = cacheDb.GetCachedTable((AsbCloudDbContext)db); } public void UpdateData(string uid, TelemetryDataDto data) { var telemetry = cacheTelemetry.FirstOrDefault(t => t.RemoteUid == uid, RefreshMode.IfResultEmpty); if(telemetry is null) { var newTelemetry = new Telemetry { RemoteUid = uid, Version = data.HmiVersion, Data = JsonSerializer.Serialize(data), LastDataSaub = JsonSerializer.Serialize(data.DataSaub), }; telemetry = cacheTelemetry.Insert(newTelemetry); } if (data.DataSaub != default) { foreach (var item in data.DataSaub) { var dataSaub = mapper.Map(item); dataSaub.IdTelemetry = telemetry.Id; db.DataSaubBases.Add(dataSaub); } db.SaveChanges(); } } public void UpdateInfo(string uid, TelemetryInfoDto info) { var telemetry = cacheTelemetry.FirstOrDefault(t => t.RemoteUid == uid); if (telemetry is null) { var newTelemetry = new Telemetry { RemoteUid = uid, Info = JsonSerializer.Serialize(info), }; telemetry = cacheTelemetry.Insert(newTelemetry); } } } }