EventService, MessageService, TelemetryUserService uses new cache model.

This commit is contained in:
ngfrolov 2022-06-10 17:36:03 +05:00
parent 62809a76cf
commit 0ac16d37e9
6 changed files with 35 additions and 27 deletions

View File

@ -1,10 +1,12 @@
using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.SAUB;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Services namespace AsbCloudApp.Services
{ {
public interface ITelemetryUserService public interface ITelemetryUserService
{ {
void Upsert(string uid, IEnumerable<TelemetryUserDto> dtos); Task UpsertAsync(string uid, IEnumerable<TelemetryUserDto> dtos, CancellationToken token = default);
} }
} }

View File

@ -1,7 +1,8 @@
using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services; using AsbCloudApp.Services;
using AsbCloudDb;
using AsbCloudDb.Model; using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache; using AsbCloudInfrastructure.EfCache;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -11,13 +12,13 @@ namespace AsbCloudInfrastructure.Services.SAUB
{ {
public class EventService : IEventService public class EventService : IEventService
{ {
private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
private readonly CacheTable<TelemetryEvent> cacheEvents;
public EventService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) public EventService(IAsbCloudDbContext db, ITelemetryService telemetryService)
{ {
this.db = db;
this.telemetryService = telemetryService; this.telemetryService = telemetryService;
cacheEvents = cacheDb.GetCachedTable<TelemetryEvent>((AsbCloudDbContext)db);
} }
public async Task UpsertAsync(string uid, IEnumerable<EventDto> dtos, public async Task UpsertAsync(string uid, IEnumerable<EventDto> dtos,
@ -35,8 +36,8 @@ namespace AsbCloudInfrastructure.Services.SAUB
IdCategory = dto.IdCategory, IdCategory = dto.IdCategory,
MessageTemplate = dto.Message MessageTemplate = dto.Message
}); });
await cacheEvents.UpsertAsync(entities, token) var result = await db.Database.ExecInsertOrUpdateAsync(db.TelemetryEvents, entities, token);
.ConfigureAwait(false); db.TelemetryEvents.DropCache();
} }
} }
} }

View File

@ -2,7 +2,7 @@
using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services; using AsbCloudApp.Services;
using AsbCloudDb.Model; using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache; using AsbCloudInfrastructure.EfCache;
using Mapster; using Mapster;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
@ -17,15 +17,11 @@ namespace AsbCloudInfrastructure.Services.SAUB
{ {
private readonly IAsbCloudDbContext db; private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
private readonly CacheTable<TelemetryEvent> cacheEvents;
private readonly CacheTable<TelemetryUser> cacheTUsers;
public MessageService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) public MessageService(IAsbCloudDbContext db, ITelemetryService telemetryService)
{ {
this.db = db; this.db = db;
this.telemetryService = telemetryService; this.telemetryService = telemetryService;
cacheEvents = cacheDb.GetCachedTable<TelemetryEvent>((AsbCloudDbContext)db);
cacheTUsers = cacheDb.GetCachedTable<TelemetryUser>((AsbCloudDbContext)db);
} }
public async Task<PaginationContainer<MessageDto>> GetMessagesAsync( public async Task<PaginationContainer<MessageDto>> GetMessagesAsync(
@ -42,7 +38,8 @@ namespace AsbCloudInfrastructure.Services.SAUB
if (idTelemetry is null) if (idTelemetry is null)
return 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()) if (!events.Any())
return null; return null;
@ -98,7 +95,8 @@ namespace AsbCloudInfrastructure.Services.SAUB
if (messagesList.Count == 0) if (messagesList.Count == 0)
return result; 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) foreach (var message in messagesList)
{ {

View File

@ -1,25 +1,29 @@
using AsbCloudApp.Comparators; using AsbCloudApp.Comparators;
using AsbCloudApp.Data.SAUB; using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services; using AsbCloudApp.Services;
using AsbCloudDb;
using AsbCloudDb.Model; using AsbCloudDb.Model;
using AsbCloudInfrastructure.EfCache;
using AsbCloudInfrastructure.Services.Cache; using AsbCloudInfrastructure.Services.Cache;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services.SAUB namespace AsbCloudInfrastructure.Services.SAUB
{ {
public class TelemetryUserService : ITelemetryUserService public class TelemetryUserService : ITelemetryUserService
{ {
private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
private readonly CacheTable<TelemetryUser> cacheTelemetryUsers;
public TelemetryUserService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) public TelemetryUserService(IAsbCloudDbContext db, ITelemetryService telemetryService)
{ {
this.db = db;
this.telemetryService = telemetryService; this.telemetryService = telemetryService;
cacheTelemetryUsers = cacheDb.GetCachedTable<TelemetryUser>((AsbCloudDbContext)db);
} }
public void Upsert(string uid, IEnumerable<TelemetryUserDto> dtos) public async Task UpsertAsync(string uid, IEnumerable<TelemetryUserDto> dtos, CancellationToken token = default)
{ {
if (!dtos.Any()) if (!dtos.Any())
return; return;
@ -35,7 +39,8 @@ namespace AsbCloudInfrastructure.Services.SAUB
Patronymic = dto.Patronymic, Patronymic = dto.Patronymic,
Surname = dto.Surname, Surname = dto.Surname,
}); });
cacheTelemetryUsers.Upsert(entities); var result = await db.Database.ExecInsertOrUpdateAsync(db.TelemetryUsers, entities, token);
db.TelemetryUsers.DropCache();
} }
} }
} }

View File

@ -25,7 +25,7 @@ public class EventServiceTest
var telemetryTracker = new Mock<ITelemetryTracker>(); var telemetryTracker = new Mock<ITelemetryTracker>();
var imezoneServiceMock = new Mock<ITimezoneService>(); var imezoneServiceMock = new Mock<ITimezoneService>();
var telemetryService = new TelemetryService(context, telemetryTracker.Object, imezoneServiceMock.Object, cacheDb); var telemetryService = new TelemetryService(context, telemetryTracker.Object, imezoneServiceMock.Object, cacheDb);
service = new EventService(context, cacheDb, telemetryService); service = new EventService(context, telemetryService);
} }
[Fact] [Fact]

View File

@ -48,7 +48,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
[HttpPost] [HttpPost]
[Route("{uid}/info")] [Route("{uid}/info")]
public async Task<IActionResult> PostInfoAsync(string uid, [FromBody] TelemetryInfoDto info, public async Task<IActionResult> PostInfoAsync(string uid, [FromBody] TelemetryInfoDto info,
CancellationToken token = default) CancellationToken token)
{ {
await telemetryService.UpdateInfoAsync(uid, info, token).ConfigureAwait(false); await telemetryService.UpdateInfoAsync(uid, info, token).ConfigureAwait(false);
return Ok(); return Ok();
@ -64,7 +64,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
[HttpPost] [HttpPost]
[Route("{uid}/timezone")] [Route("{uid}/timezone")]
public async Task<IActionResult> UpdateTimeZoneAsync(string uid, SimpleTimezoneDto timezone, public async Task<IActionResult> UpdateTimeZoneAsync(string uid, SimpleTimezoneDto timezone,
CancellationToken token = default) CancellationToken token)
{ {
await telemetryService.UpdateTimezoneAsync(uid, timezone, token) await telemetryService.UpdateTimezoneAsync(uid, timezone, token)
.ConfigureAwait(false); .ConfigureAwait(false);
@ -81,7 +81,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
[HttpPost] [HttpPost]
[Route("{uid}/message")] [Route("{uid}/message")]
public async Task<IActionResult> PostMessagesAsync(string uid, [FromBody] IEnumerable<TelemetryMessageDto> dtos, public async Task<IActionResult> PostMessagesAsync(string uid, [FromBody] IEnumerable<TelemetryMessageDto> dtos,
CancellationToken token = default) CancellationToken token)
{ {
var idWell = telemetryService.GetIdWellByTelemetryUid(uid); var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
await messageService.InsertAsync(uid, dtos, token).ConfigureAwait(false); await messageService.InsertAsync(uid, dtos, token).ConfigureAwait(false);
@ -103,7 +103,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
[HttpPost] [HttpPost]
[Route("{uid}/event")] [Route("{uid}/event")]
public async Task<IActionResult> PostEventsAsync(string uid, [FromBody] List<EventDto> events, public async Task<IActionResult> PostEventsAsync(string uid, [FromBody] List<EventDto> events,
CancellationToken token = default) CancellationToken token)
{ {
await eventService.UpsertAsync(uid, events, token) await eventService.UpsertAsync(uid, events, token)
.ConfigureAwait(false); .ConfigureAwait(false);
@ -115,12 +115,14 @@ namespace AsbCloudWebApi.Controllers.SAUB
/// </summary> /// </summary>
/// <param name="uid">Уникальный идентификатор отправителя</param> /// <param name="uid">Уникальный идентификатор отправителя</param>
/// <param name="users">справочник пользователей телеметрии</param> /// <param name="users">справочник пользователей телеметрии</param>
/// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
[Route("{uid}/user")] [Route("{uid}/user")]
public IActionResult PostUsers(string uid, [FromBody] List<TelemetryUserDto> users) public async Task<IActionResult> PostUsersAsync(string uid, [FromBody] List<TelemetryUserDto> users,
CancellationToken token)
{ {
telemetryUserService.Upsert(uid, users); await telemetryUserService.UpsertAsync(uid, users, token);
return Ok(); return Ok();
} }
} }