#646 Репозиторий Хранения названий источников данных от систем #11
No reviewers
Labels
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: on.nemtina/persistence#11
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "DataSourceSystem"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -0,0 +30,4 @@
public void Dispose()
{
dataSourceSystemClient.Dispose();
Про метод Dispose в конце этого класса.
Microsoft рекомендует после dataSourceSystemClient.Dispose() вызывать GC.SuppressFinalize(this).
@ -44,3 +44,3 @@
/// Получить статистику по системам
/// </summary>
/// <param name="autoDrillingSystem"></param>
/// <param name="systemIds"></param>
В комментариях к методам попадаются параметры, которых уже нет в сигнатуре методов
@ -36,2 +35,3 @@
public async Task<IEnumerable<DataSourceSystemDto>> GetSystems(CancellationToken token)
{
var result = await ExecuteGetResponse<IEnumerable<string>>(
var result = await ExecuteGetResponse<IEnumerable<DataSourceSystemDto>>(
Для метода можно не указывать generic-тип
@ -63,3 +62,4 @@
async () => await refitTechMessagesClient.GetStatistics(systemIds, categoryIds, token), token);
return result;
}
Про метод Dispose в конце этого класса.
Microsoft рекомендует после refitTechMessagesClient.Dispose(); вызывать GC.SuppressFinalize(this).
@ -100,3 +100,3 @@
{
//act
var response = await techMessagesClient.AddRange(dtos, new CancellationToken());
var response = await techMessagesClient.AddRange(systemId, dtos, new CancellationToken());
CancellationToken.None
@ -136,0 +128,4 @@
public async Task GetSystems_AfterSave_returns_success()
{
//arrange
var dtos = await InsertRange(Guid.NewGuid());
лучше написать просто так: await InsertRange(Guid.NewGuid())
А то студия подсвечивает переменнeю dto как неиспользованную и хочет ее удалить.
@ -153,3 +149,2 @@
var importantId = 1;
var autoDrillingSystem = nameof(TechMessageDto.System);
var imortantIds = new [] { 1 };
Лучше назвать не imortantIds, а categoryIds
@ -173,0 +162,4 @@
public async Task GetStatistics_AfterSave_returns_success()
{
//arrange
var categoryIds = new[] { 1 };
Когда я написала так: var categoryIds = new[] { 1, 2 }, то тест упал, ругается на ошибку маршрутизации
У интерфейса рефита должно быть [Query(CollectionFormat.Multi)], а было просто [Query]. Исправил.
@ -0,0 +7,4 @@
{
private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey";
private readonly IMemoryCache memoryCache;
private const int CacheExpirationInMinutes = 60;
private readonly TimeSpan? AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(60);
@ -0,0 +22,4 @@
public override async Task<IEnumerable<DataSourceSystemDto>> Get(CancellationToken token)
{
var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async f =>
var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async (cacheEntry) =>
{
cacheEntry.AbsoluteExpirationRelativeToNow = AbsoluteExpirationRelativeToNow;
var dtos = await base.Get(token);
});
@ -0,0 +25,4 @@
{
var entity = dataSourceSystemDto.Adapt<DataSourceSystem>();
await db.Set<DataSourceSystem>().AddAsync(entity);
Добавить token в метод AddAsync
@ -0,0 +32,4 @@
public virtual async Task<IEnumerable<DataSourceSystemDto>> Get(CancellationToken token)
{
var query = GetQueryReadOnly();
var entities = await query.ToListAsync(token);
ToArrayAsync
@ -66,0 +53,4 @@
{
var query = GetQueryReadOnly();
var result = await query
.Where(e => systems.Count() == 0 || systems.Contains(e.System.SystemId))
Для IEnumerable лучше использовать Any
@ -102,3 +90,1 @@
entity.SystemId = systemId;
entity.UserId = userId;
await CreateSystemIfNotExist(systemId, token);
Здесь лучше отрефакторить, потому что если представить, что в dtos будет 10 элементов, и в базе не будет systems под эти элементы, то в цикле 10 раз вызовется метод SaveChanges. Наверное, лучше вне цикла проверить, какие системы не существуют и сразу сохранить всю коллекцию недостающих систем в БД.
Тут нужно сделать так:
Поскольку в рамках одного сохранения набора техн. сообщений может быть только одна система. Достаточно один раз проверить существует она или нет и, в случае отсутствия добавить. Не было никакого смысла делать это в цикле - запрос на сохранение, так или иначе, мог быть вызван только один раз.
@ -143,0 +116,4 @@
{
var systems = await sourceSystemRepository.Get(token);
return systems ?? [];
По идее в переменной systems не может вернуться null, поэтому ?? [] лишние
@ -143,0 +128,4 @@
Min = group.Min(e => e.Timestamp),
Max = group.Max(e => e.Timestamp),
});
var values = await query.FirstOrDefaultAsync(token);
Здесь values может быть null, и если это null то нужно null возвращать, а в методе контроллера соответственно указывать NoContent (если есть контроллер, который вызывает этот метод).
@ -178,0 +148,4 @@
system = new DataSourceSystemDto()
{
SystemId = systemId,
Name = string.Empty
Группировка будет по SystemId