diff --git a/AsbCloudApp/Services/ITelemetryUserService.cs b/AsbCloudApp/Services/ITelemetryUserService.cs index c19dbb39..1e904197 100644 --- a/AsbCloudApp/Services/ITelemetryUserService.cs +++ b/AsbCloudApp/Services/ITelemetryUserService.cs @@ -1,10 +1,12 @@ using AsbCloudApp.Data.SAUB; using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; namespace AsbCloudApp.Services { public interface ITelemetryUserService { - void Upsert(string uid, IEnumerable dtos); + Task UpsertAsync(string uid, IEnumerable dtos, CancellationToken token = default); } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/SAUB/EventService.cs b/AsbCloudInfrastructure/Services/SAUB/EventService.cs index db9b21e8..744e3f57 100644 --- a/AsbCloudInfrastructure/Services/SAUB/EventService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/EventService.cs @@ -1,7 +1,8 @@ using AsbCloudApp.Data.SAUB; using AsbCloudApp.Services; +using AsbCloudDb; using AsbCloudDb.Model; -using AsbCloudInfrastructure.Services.Cache; +using AsbCloudInfrastructure.EfCache; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -11,13 +12,13 @@ namespace AsbCloudInfrastructure.Services.SAUB { public class EventService : IEventService { + private readonly IAsbCloudDbContext db; private readonly ITelemetryService telemetryService; - private readonly CacheTable cacheEvents; - public EventService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) + public EventService(IAsbCloudDbContext db, ITelemetryService telemetryService) { + this.db = db; this.telemetryService = telemetryService; - cacheEvents = cacheDb.GetCachedTable((AsbCloudDbContext)db); } public async Task UpsertAsync(string uid, IEnumerable dtos, @@ -35,8 +36,8 @@ namespace AsbCloudInfrastructure.Services.SAUB IdCategory = dto.IdCategory, MessageTemplate = dto.Message }); - await cacheEvents.UpsertAsync(entities, token) - .ConfigureAwait(false); + var result = await db.Database.ExecInsertOrUpdateAsync(db.TelemetryEvents, entities, token); + db.TelemetryEvents.DropCache(); } } } diff --git a/AsbCloudInfrastructure/Services/SAUB/MessageService.cs b/AsbCloudInfrastructure/Services/SAUB/MessageService.cs index 2090d615..11db53f7 100644 --- a/AsbCloudInfrastructure/Services/SAUB/MessageService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/MessageService.cs @@ -2,7 +2,7 @@ using AsbCloudApp.Data.SAUB; using AsbCloudApp.Services; using AsbCloudDb.Model; -using AsbCloudInfrastructure.Services.Cache; +using AsbCloudInfrastructure.EfCache; using Mapster; using Microsoft.EntityFrameworkCore; using System; @@ -17,15 +17,11 @@ namespace AsbCloudInfrastructure.Services.SAUB { private readonly IAsbCloudDbContext db; private readonly ITelemetryService telemetryService; - private readonly CacheTable cacheEvents; - private readonly CacheTable cacheTUsers; - public MessageService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) + public MessageService(IAsbCloudDbContext db, ITelemetryService telemetryService) { this.db = db; this.telemetryService = telemetryService; - cacheEvents = cacheDb.GetCachedTable((AsbCloudDbContext)db); - cacheTUsers = cacheDb.GetCachedTable((AsbCloudDbContext)db); } public async Task> GetMessagesAsync( @@ -42,7 +38,8 @@ namespace AsbCloudInfrastructure.Services.SAUB if (idTelemetry is null) return null; - var events = cacheEvents.Where(e => e.IdTelemetry == idTelemetry); + var allEvents = await db.TelemetryEvents.FromCacheAsync(token); + var events = allEvents.Where(e => e.IdTelemetry == idTelemetry); if (!events.Any()) return null; @@ -98,7 +95,8 @@ namespace AsbCloudInfrastructure.Services.SAUB if (messagesList.Count == 0) return result; - var users = cacheTUsers.Where(u => u.IdTelemetry == idTelemetry); + var allUsers = await db.TelemetryUsers.FromCacheAsync(token); + var users = allUsers.Where(u => u.IdTelemetry == idTelemetry); foreach (var message in messagesList) { diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs index 98fece8b..15ef2bce 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs @@ -1,25 +1,29 @@ using AsbCloudApp.Comparators; using AsbCloudApp.Data.SAUB; using AsbCloudApp.Services; +using AsbCloudDb; using AsbCloudDb.Model; +using AsbCloudInfrastructure.EfCache; using AsbCloudInfrastructure.Services.Cache; using System.Collections.Generic; using System.Linq; +using System.Threading; +using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services.SAUB { public class TelemetryUserService : ITelemetryUserService { + private readonly IAsbCloudDbContext db; private readonly ITelemetryService telemetryService; - private readonly CacheTable cacheTelemetryUsers; - public TelemetryUserService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) + public TelemetryUserService(IAsbCloudDbContext db, ITelemetryService telemetryService) { + this.db = db; this.telemetryService = telemetryService; - cacheTelemetryUsers = cacheDb.GetCachedTable((AsbCloudDbContext)db); } - public void Upsert(string uid, IEnumerable dtos) + public async Task UpsertAsync(string uid, IEnumerable dtos, CancellationToken token = default) { if (!dtos.Any()) return; @@ -35,7 +39,8 @@ namespace AsbCloudInfrastructure.Services.SAUB Patronymic = dto.Patronymic, Surname = dto.Surname, }); - cacheTelemetryUsers.Upsert(entities); + var result = await db.Database.ExecInsertOrUpdateAsync(db.TelemetryUsers, entities, token); + db.TelemetryUsers.DropCache(); } } } diff --git a/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs index d8931261..6c188b0d 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs @@ -25,7 +25,7 @@ public class EventServiceTest var telemetryTracker = new Mock(); var imezoneServiceMock = new Mock(); var telemetryService = new TelemetryService(context, telemetryTracker.Object, imezoneServiceMock.Object, cacheDb); - service = new EventService(context, cacheDb, telemetryService); + service = new EventService(context, telemetryService); } [Fact] diff --git a/AsbCloudWebApi/Controllers/SAUB/TelemetryController.cs b/AsbCloudWebApi/Controllers/SAUB/TelemetryController.cs index 985dfabf..65d074ee 100644 --- a/AsbCloudWebApi/Controllers/SAUB/TelemetryController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/TelemetryController.cs @@ -48,7 +48,7 @@ namespace AsbCloudWebApi.Controllers.SAUB [HttpPost] [Route("{uid}/info")] public async Task PostInfoAsync(string uid, [FromBody] TelemetryInfoDto info, - CancellationToken token = default) + CancellationToken token) { await telemetryService.UpdateInfoAsync(uid, info, token).ConfigureAwait(false); return Ok(); @@ -64,7 +64,7 @@ namespace AsbCloudWebApi.Controllers.SAUB [HttpPost] [Route("{uid}/timezone")] public async Task UpdateTimeZoneAsync(string uid, SimpleTimezoneDto timezone, - CancellationToken token = default) + CancellationToken token) { await telemetryService.UpdateTimezoneAsync(uid, timezone, token) .ConfigureAwait(false); @@ -81,7 +81,7 @@ namespace AsbCloudWebApi.Controllers.SAUB [HttpPost] [Route("{uid}/message")] public async Task PostMessagesAsync(string uid, [FromBody] IEnumerable dtos, - CancellationToken token = default) + CancellationToken token) { var idWell = telemetryService.GetIdWellByTelemetryUid(uid); await messageService.InsertAsync(uid, dtos, token).ConfigureAwait(false); @@ -103,7 +103,7 @@ namespace AsbCloudWebApi.Controllers.SAUB [HttpPost] [Route("{uid}/event")] public async Task PostEventsAsync(string uid, [FromBody] List events, - CancellationToken token = default) + CancellationToken token) { await eventService.UpsertAsync(uid, events, token) .ConfigureAwait(false); @@ -115,12 +115,14 @@ namespace AsbCloudWebApi.Controllers.SAUB /// /// Уникальный идентификатор отправителя /// справочник пользователей телеметрии + /// /// [HttpPost] [Route("{uid}/user")] - public IActionResult PostUsers(string uid, [FromBody] List users) + public async Task PostUsersAsync(string uid, [FromBody] List users, + CancellationToken token) { - telemetryUserService.Upsert(uid, users); + await telemetryUserService.UpsertAsync(uid, users, token); return Ok(); } }