#646 Репозиторий Хранения названий источников данных от систем #11

Merged
on.nemtina merged 9 commits from DataSourceSystem into master 2024-12-16 09:47:15 +05:00
Collaborator
No description provided.
on.nemtina was assigned by rs.efremov 2024-12-13 11:03:22 +05:00
rs.efremov added 7 commits 2024-12-13 11:03:22 +05:00
on.nemtina requested changes 2024-12-13 13:19:33 +05:00
@ -0,0 +30,4 @@
public void Dispose()
{
dataSourceSystemClient.Dispose();
Owner

Про метод Dispose в конце этого класса.
Microsoft рекомендует после dataSourceSystemClient.Dispose() вызывать GC.SuppressFinalize(this).

Про метод Dispose в конце этого класса. Microsoft рекомендует после dataSourceSystemClient.Dispose() вызывать GC.SuppressFinalize(this).
@ -44,3 +44,3 @@
/// Получить статистику по системам
/// </summary>
/// <param name="autoDrillingSystem"></param>
/// <param name="systemIds"></param>
Owner

В комментариях к методам попадаются параметры, которых уже нет в сигнатуре методов

В комментариях к методам попадаются параметры, которых уже нет в сигнатуре методов
@ -36,2 +35,3 @@
public async Task<IEnumerable<DataSourceSystemDto>> GetSystems(CancellationToken token)
{
var result = await ExecuteGetResponse<IEnumerable<string>>(
var result = await ExecuteGetResponse<IEnumerable<DataSourceSystemDto>>(
Owner

Для метода можно не указывать generic-тип

Для метода можно не указывать generic-тип
@ -63,3 +62,4 @@
async () => await refitTechMessagesClient.GetStatistics(systemIds, categoryIds, token), token);
return result;
}
Owner

Про метод Dispose в конце этого класса.
Microsoft рекомендует после refitTechMessagesClient.Dispose(); вызывать GC.SuppressFinalize(this).

Про метод 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());
Owner

CancellationToken.None

CancellationToken.None
@ -136,0 +128,4 @@
public async Task GetSystems_AfterSave_returns_success()
{
//arrange
var dtos = await InsertRange(Guid.NewGuid());
Owner

лучше написать просто так: await InsertRange(Guid.NewGuid())
А то студия подсвечивает переменнeю dto как неиспользованную и хочет ее удалить.

лучше написать просто так: await InsertRange(Guid.NewGuid()) А то студия подсвечивает переменнeю dto как неиспользованную и хочет ее удалить.
@ -153,3 +149,2 @@
var importantId = 1;
var autoDrillingSystem = nameof(TechMessageDto.System);
var imortantIds = new [] { 1 };
Owner

Лучше назвать не imortantIds, а categoryIds

Лучше назвать не imortantIds, а categoryIds
@ -173,0 +162,4 @@
public async Task GetStatistics_AfterSave_returns_success()
{
//arrange
var categoryIds = new[] { 1 };
Owner

Когда я написала так: var categoryIds = new[] { 1, 2 }, то тест упал, ругается на ошибку маршрутизации

Когда я написала так: var categoryIds = new[] { 1, 2 }, то тест упал, ругается на ошибку маршрутизации
Author
Collaborator

У интерфейса рефита должно быть [Query(CollectionFormat.Multi)], а было просто [Query]. Исправил.

У интерфейса рефита должно быть [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;
Owner

private readonly TimeSpan? AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(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 =>
Owner

var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async (cacheEntry) =>
{
cacheEntry.AbsoluteExpirationRelativeToNow = AbsoluteExpirationRelativeToNow;
var dtos = await base.Get(token);

return dtos;

});

var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async (cacheEntry) => { cacheEntry.AbsoluteExpirationRelativeToNow = AbsoluteExpirationRelativeToNow; var dtos = await base.Get(token); return dtos; });
@ -0,0 +25,4 @@
{
var entity = dataSourceSystemDto.Adapt<DataSourceSystem>();
await db.Set<DataSourceSystem>().AddAsync(entity);
Owner

Добавить token в метод AddAsync

Добавить token в метод AddAsync
@ -0,0 +32,4 @@
public virtual async Task<IEnumerable<DataSourceSystemDto>> Get(CancellationToken token)
{
var query = GetQueryReadOnly();
var entities = await query.ToListAsync(token);
Owner

ToArrayAsync

ToArrayAsync
@ -66,0 +53,4 @@
{
var query = GetQueryReadOnly();
var result = await query
.Where(e => systems.Count() == 0 || systems.Contains(e.System.SystemId))
Owner

Для IEnumerable лучше использовать Any

Для IEnumerable лучше использовать Any
@ -102,3 +90,1 @@
entity.SystemId = systemId;
entity.UserId = userId;
await CreateSystemIfNotExist(systemId, token);
Owner

Здесь лучше отрефакторить, потому что если представить, что в dtos будет 10 элементов, и в базе не будет systems под эти элементы, то в цикле 10 раз вызовется метод SaveChanges. Наверное, лучше вне цикла проверить, какие системы не существуют и сразу сохранить всю коллекцию недостающих систем в БД.

Здесь лучше отрефакторить, потому что если представить, что в dtos будет 10 элементов, и в базе не будет systems под эти элементы, то в цикле 10 раз вызовется метод SaveChanges. Наверное, лучше вне цикла проверить, какие системы не существуют и сразу сохранить всю коллекцию недостающих систем в БД.
Author
Collaborator

Тут нужно сделать так:image
Поскольку в рамках одного сохранения набора техн. сообщений может быть только одна система. Достаточно один раз проверить существует она или нет и, в случае отсутствия добавить. Не было никакого смысла делать это в цикле - запрос на сохранение, так или иначе, мог быть вызван только один раз.

Тут нужно сделать так:![image](/attachments/2af3ebd1-4759-48ac-906c-d8b88883c5df)<br>Поскольку в рамках одного сохранения набора техн. сообщений может быть только одна система. Достаточно один раз проверить существует она или нет и, в случае отсутствия добавить. Не было никакого смысла делать это в цикле - запрос на сохранение, так или иначе, мог быть вызван только один раз.
@ -143,0 +116,4 @@
{
var systems = await sourceSystemRepository.Get(token);
return systems ?? [];
Owner

По идее в переменной systems не может вернуться null, поэтому ?? [] лишние

По идее в переменной systems не может вернуться null, поэтому ?? [] лишние
@ -143,0 +128,4 @@
Min = group.Min(e => e.Timestamp),
Max = group.Max(e => e.Timestamp),
});
var values = await query.FirstOrDefaultAsync(token);
Owner

Здесь values может быть null, и если это null то нужно null возвращать, а в методе контроллера соответственно указывать NoContent (если есть контроллер, который вызывает этот метод).

Здесь values может быть null, и если это null то нужно null возвращать, а в методе контроллера соответственно указывать NoContent (если есть контроллер, который вызывает этот метод).
@ -178,0 +148,4 @@
system = new DataSourceSystemDto()
{
SystemId = systemId,
Name = string.Empty
Owner

Группировка будет по SystemId

Группировка будет по SystemId
rs.efremov added 1 commit 2024-12-13 15:30:14 +05:00
rs.efremov added 1 commit 2024-12-13 17:30:40 +05:00
on.nemtina merged commit e3319867dd into master 2024-12-16 09:47:15 +05:00
on.nemtina deleted branch DataSourceSystem 2024-12-16 09:47:15 +05:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: on.nemtina/persistence#11
No description provided.