forked from ddrilling/AsbCloudServer
EventService, MessageService, TelemetryUserService uses new cache model.
This commit is contained in:
parent
62809a76cf
commit
0ac16d37e9
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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]
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user