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 System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
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.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<TelemetryEvent> cacheEvents;
public EventService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService)
public EventService(IAsbCloudDbContext db, ITelemetryService telemetryService)
{
this.db = db;
this.telemetryService = telemetryService;
cacheEvents = cacheDb.GetCachedTable<TelemetryEvent>((AsbCloudDbContext)db);
}
public async Task UpsertAsync(string uid, IEnumerable<EventDto> 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();
}
}
}

View File

@ -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<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.telemetryService = telemetryService;
cacheEvents = cacheDb.GetCachedTable<TelemetryEvent>((AsbCloudDbContext)db);
cacheTUsers = cacheDb.GetCachedTable<TelemetryUser>((AsbCloudDbContext)db);
}
public async Task<PaginationContainer<MessageDto>> 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)
{

View File

@ -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<TelemetryUser> cacheTelemetryUsers;
public TelemetryUserService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService)
public TelemetryUserService(IAsbCloudDbContext db, ITelemetryService telemetryService)
{
this.db = db;
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())
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();
}
}
}

View File

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

View File

@ -48,7 +48,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
[HttpPost]
[Route("{uid}/info")]
public async Task<IActionResult> 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<IActionResult> 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<IActionResult> PostMessagesAsync(string uid, [FromBody] IEnumerable<TelemetryMessageDto> 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<IActionResult> PostEventsAsync(string uid, [FromBody] List<EventDto> events,
CancellationToken token = default)
CancellationToken token)
{
await eventService.UpsertAsync(uid, events, token)
.ConfigureAwait(false);
@ -115,12 +115,14 @@ namespace AsbCloudWebApi.Controllers.SAUB
/// </summary>
/// <param name="uid">Уникальный идентификатор отправителя</param>
/// <param name="users">справочник пользователей телеметрии</param>
/// <param name="token"></param>
/// <returns></returns>
[HttpPost]
[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();
}
}