From 3c94d55cafaa62188f8aef4607d65429c1a66750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D1=8F=20=D0=91=D0=B8=D0=B7=D1=8E=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0?= Date: Tue, 12 Nov 2024 13:36:09 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D1=8B=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B9?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=20API=20=D0=B8=20=D0=BC=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B4=D1=8B=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Persistence/API/IApiChangeLog.cs | 28 ++++---- Persistence/API/IApiDictionaryElement.cs | 16 ++--- Persistence/API/IApiSetpoint.cs | 19 +++-- Persistence/API/IApiSync.cs | 14 ++-- Persistence/API/IApiTableData.cs | 10 ++- Persistence/API/IApiTimeSeriesData.cs | 42 +++++++++++ Persistence/API/IGraphData.cs | 9 +-- Persistence/ClassDiagram.cd | 71 ------------------- Persistence/Models/ITimeSeriesAbstractDto.cs | 18 +++++ Persistence/Models/SetpointDescriptionDto.cs | 15 ---- .../AbstractTimeSeriesDataRepository.cs | 12 +++- .../Repositories/IGraphDataRepository.cs | 26 +++++++ .../Repositories/ISetpointRepository.cs | 45 ++++++++++++ Persistence/Repositories/ISyncRepository.cs | 6 +- .../Repositories/ITableDataRepository.cs | 19 +++++ .../Repositories/ITimeSeriesDataRepository.cs | 22 +++++- 16 files changed, 224 insertions(+), 148 deletions(-) create mode 100644 Persistence/API/IApiTimeSeriesData.cs delete mode 100644 Persistence/ClassDiagram.cd create mode 100644 Persistence/Models/ITimeSeriesAbstractDto.cs delete mode 100644 Persistence/Models/SetpointDescriptionDto.cs create mode 100644 Persistence/Repositories/IGraphDataRepository.cs create mode 100644 Persistence/Repositories/ISetpointRepository.cs create mode 100644 Persistence/Repositories/ITableDataRepository.cs diff --git a/Persistence/API/IApiChangeLog.cs b/Persistence/API/IApiChangeLog.cs index 61af1e8..0690bf7 100644 --- a/Persistence/API/IApiChangeLog.cs +++ b/Persistence/API/IApiChangeLog.cs @@ -1,14 +1,10 @@ -using Persistence.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; namespace Persistence.API; /// -/// Интерфейс для работы с API, предназначенного для CRUD-операций над данными +/// Интерфейс для работы с API журнала изменений /// public interface IApiChangeLog where TDto : class, new() @@ -19,7 +15,7 @@ public interface IApiChangeLog /// /// /// - Task> GetChangeLogCurrent(CancellationToken token); + Task>> GetChangeLogCurrent(CancellationToken token); /// /// Получение исторических данных на определенную дату @@ -27,15 +23,15 @@ public interface IApiChangeLog /// /// /// - Task> GetChangeLogForDate(DateTimeOffset historyMoment, CancellationToken token); - + Task>> GetChangeLogForDate(DateTimeOffset historyMoment, CancellationToken token); + /// /// Добавить одну запись /// /// /// /// - Task AddAsync(TDto dto, CancellationToken token); + Task> AddAsync(TDto dto, CancellationToken token); /// /// Добавить несколько записей @@ -43,7 +39,7 @@ public interface IApiChangeLog /// /// /// - Task AddRangeAsync(IEnumerable dtos, CancellationToken token); + Task> AddRangeAsync(IEnumerable dtos, CancellationToken token); /// /// Обновить одну запись @@ -51,7 +47,7 @@ public interface IApiChangeLog /// /// /// - Task UpdateAsync(TDto dto, CancellationToken token); + Task> UpdateAsync(TDto dto, CancellationToken token); /// /// Обновить несколько записей @@ -59,7 +55,7 @@ public interface IApiChangeLog /// /// /// - Task UpdateRangeAsync(IEnumerable dtos, CancellationToken token); + Task> UpdateRangeAsync(IEnumerable dtos, CancellationToken token); /// /// Удалить одну запись @@ -67,7 +63,7 @@ public interface IApiChangeLog /// /// /// - Task DeleteAsync(int id, CancellationToken token); + Task> DeleteAsync(int id, CancellationToken token); /// /// Удалить несколько записей @@ -75,5 +71,5 @@ public interface IApiChangeLog /// /// /// - Task DeleteRangeAsync(IEnumerable ids, CancellationToken token); + Task> DeleteRangeAsync(IEnumerable ids, CancellationToken token); } diff --git a/Persistence/API/IApiDictionaryElement.cs b/Persistence/API/IApiDictionaryElement.cs index 38cc68f..de36f9e 100644 --- a/Persistence/API/IApiDictionaryElement.cs +++ b/Persistence/API/IApiDictionaryElement.cs @@ -1,13 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; namespace Persistence.API; /// -/// Интерфейс для API, предназначенного для работы со справочниками +/// Интерфейс для API, предназначенного для работы с элементами справочников /// public interface IApiDictionaryElement where TDto : class, new() { @@ -17,7 +13,7 @@ public interface IApiDictionaryElement where TDto : class, new() /// ключ справочника /// /// - Task> GetDataAsync(Guid dictionaryKey, CancellationToken token); + Task>> GetAsync(Guid dictionaryKey, CancellationToken token); /// /// Добавить элемент в справочник @@ -26,7 +22,7 @@ public interface IApiDictionaryElement where TDto : class, new() /// /// /// - Task AddAsync(Guid dictionaryKey, TDto dto, CancellationToken token); + Task> AddAsync(Guid dictionaryKey, TDto dto, CancellationToken token); /// /// Изменить одну запись @@ -36,7 +32,7 @@ public interface IApiDictionaryElement where TDto : class, new() /// /// /// - Task UpdateAsync(Guid dictionaryKey, Guid dictionaryElementKey, TDto dto, CancellationToken token); + Task> UpdateAsync(Guid dictionaryKey, Guid dictionaryElementKey, TDto dto, CancellationToken token); /// /// Удалить одну запись @@ -45,5 +41,5 @@ public interface IApiDictionaryElement where TDto : class, new() /// ключ элемента в справочнике /// /// - Task DeleteAsync(Guid dictionaryKey, Guid dictionaryElementKey, CancellationToken token); + Task> DeleteAsync(Guid dictionaryKey, Guid dictionaryElementKey, CancellationToken token); } diff --git a/Persistence/API/IApiSetpoint.cs b/Persistence/API/IApiSetpoint.cs index 6c113dd..14fa8d2 100644 --- a/Persistence/API/IApiSetpoint.cs +++ b/Persistence/API/IApiSetpoint.cs @@ -1,18 +1,17 @@ using Microsoft.AspNetCore.Mvc; using Persistence.Models; -using System.Threading.Tasks; namespace Persistence.API; /// -/// Интерфейс для работы с API, предназначенного для работы с уставками +/// Интерфейс для API, предназначенного для работы с уставками /// public interface IApiSetpoint { /// /// Получить актуальные значения уставок /// - /// + /// ключи уставок /// /// Task>> GetCurrentAsync(IEnumerable setpoitKeys, CancellationToken token); @@ -20,28 +19,26 @@ public interface IApiSetpoint /// /// Получить значения уставок за определенный момент времени /// - /// + /// ключи уставок /// дата, на которую получаем данные /// /// - Task> GetHistoryAsync(IEnumerable setpoitKeys, DateTimeOffset historyMoment, CancellationToken token); + Task>> GetHistoryAsync(IEnumerable setpoitKeys, DateTimeOffset historyMoment, CancellationToken token); /// /// Получить историю изменений значений уставок /// - /// + /// ключи уставок /// /// - Task>> GetLogAsync(IEnumerable setpoitKeys, CancellationToken token); + Task>>> GetLogAsync(IEnumerable setpoitKeys, CancellationToken token); /// /// Метод сохранения уставки /// - /// ключ операции + /// ключ уставки /// значение /// /// - /// to do - /// id User учесть в соответствующем методе репозитория - Task SaveAsync(Guid setpointKey, object newValue, CancellationToken token); + Task> SaveAsync(Guid setpointKey, object newValue, CancellationToken token); } diff --git a/Persistence/API/IApiSync.cs b/Persistence/API/IApiSync.cs index 3df36b2..cb3d50d 100644 --- a/Persistence/API/IApiSync.cs +++ b/Persistence/API/IApiSync.cs @@ -1,14 +1,10 @@ -using Persistence.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; namespace Persistence.API; /// -/// Интерфейс для работы с API, предназначенного для синхронизации данных +/// Интерфейс для API, предназначенного для синхронизации данных /// public interface IApiSync where TDto : class, new() { @@ -19,12 +15,12 @@ public interface IApiSync where TDto : class, new() /// количество записей /// /// - Task> GetPartAsync(DateTimeOffset dateBegin, int take = 24 * 60 * 60, CancellationToken token = default); + Task>> GetPartAsync(DateTimeOffset dateBegin, int take = 24 * 60 * 60, CancellationToken token = default); /// /// Получить диапазон дат, для которых есть данные в репозитории /// /// /// - Task GetDatesRangeAsync(CancellationToken token); + Task> GetDatesRangeAsync(CancellationToken token); } diff --git a/Persistence/API/IApiTableData.cs b/Persistence/API/IApiTableData.cs index bbdad57..f3f0364 100644 --- a/Persistence/API/IApiTableData.cs +++ b/Persistence/API/IApiTableData.cs @@ -1,4 +1,5 @@ -using Persistence.Models; +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; using System; using System.Collections.Generic; using System.Linq; @@ -7,7 +8,7 @@ using System.Threading.Tasks; namespace Persistence.API; -/// Интерфейс для работы с API, предназначенного для работы с табличными данными +/// Интерфейс для API, предназначенного для работы с табличными данными public interface IApiTableData where TDto : class, new() where TRequest : RequestDto @@ -15,11 +16,8 @@ public interface IApiTableData /// /// Получить страницу списка объектов /// - /// - /// - /// строка с настройками сортировки /// параметры фильтрации /// /// - Task> GetPageAsync(TRequest request, CancellationToken token); + Task>> GetPageAsync(TRequest request, CancellationToken token); } diff --git a/Persistence/API/IApiTimeSeriesData.cs b/Persistence/API/IApiTimeSeriesData.cs new file mode 100644 index 0000000..f00aa7f --- /dev/null +++ b/Persistence/API/IApiTimeSeriesData.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.API; + +/// +/// Интерфейс для работы с API временных данных +/// +public interface IApiTimeSeriesData + where TDto : class, new() +{ + /// + /// Получить спискок объектов, удовлетворяющий диапазон дат + /// + /// дата начала + /// дата окончания + /// + /// + Task>> GetAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token); + + /// + /// Получить диапазон дат, для которых есть данные в репозитории + /// + /// + /// + Task> GetDatesRangeAsync(CancellationToken token); + + /// + /// Добавление записей + /// + /// + /// + /// + Task> InsertRange(IEnumerable dtos, CancellationToken token); + + +} diff --git a/Persistence/API/IGraphData.cs b/Persistence/API/IGraphData.cs index ff020f1..6911412 100644 --- a/Persistence/API/IGraphData.cs +++ b/Persistence/API/IGraphData.cs @@ -1,4 +1,5 @@ -using Persistence.Models; +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; namespace Persistence.API; @@ -8,18 +9,18 @@ namespace Persistence.API; public interface IGraphData { /// - /// Получить список объектов с прореживанием + /// Получить список объектов с прореживанием, удовлетворящий диапазону дат /// /// дата начала /// дата окончания /// /// - Task> GetThinnedDataAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, int approxPointsCount = 1024); + Task>> GetThinnedDataAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, int approxPointsCount = 1024); /// /// Получить диапазон дат, для которых есть данные в репозитории /// /// /// - Task GetDatesRangeAsync(CancellationToken token); + Task> GetDatesRangeAsync(CancellationToken token); } diff --git a/Persistence/ClassDiagram.cd b/Persistence/ClassDiagram.cd deleted file mode 100644 index 4a6aa87..0000000 --- a/Persistence/ClassDiagram.cd +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - ACCAAAAAAAAABAAQAAAABAAAAAACAAAgAAAAAABAAAE= - Repositories\AbstractChangeLogRepository.cs - - - - - - - AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Repositories\AbstractTimeSeriesDataRepository.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Services\ArchiveService.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Services\TimeSeriesDataObserverService.cs - - - - - - - ACCAAAAAAAAABAAAAAAABAAAAAACAAAgAAAAAABAAAE= - Repositories\IChangeLogRepository.cs - - - - - - AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Repositories\ISyncRepository.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Repositories\ITimeSeriesDataRepository.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Services\IArchiveService.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Services\ITimeSeriesDataObserverService.cs - - - - \ No newline at end of file diff --git a/Persistence/Models/ITimeSeriesAbstractDto.cs b/Persistence/Models/ITimeSeriesAbstractDto.cs new file mode 100644 index 0000000..f95fded --- /dev/null +++ b/Persistence/Models/ITimeSeriesAbstractDto.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Models; + +/// +/// Интерфейс, описывающий временные данные +/// +public interface ITimeSeriesAbstractDto +{ + /// + /// временная отметка + /// + DateTimeOffset Date { get; set; } +} diff --git a/Persistence/Models/SetpointDescriptionDto.cs b/Persistence/Models/SetpointDescriptionDto.cs deleted file mode 100644 index 27005b0..0000000 --- a/Persistence/Models/SetpointDescriptionDto.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Persistence.Models; -public class SetpointDescriptionDto -{ - public int Id { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public string Type { get; set; } -} - diff --git a/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs b/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs index d42719f..c947dbc 100644 --- a/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs +++ b/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace Persistence.Repositories; public abstract class AbstractTimeSeriesDataRepository : ITimeSeriesDataRepository - where TDto : class, new() + where TDto : class, ITimeSeriesAbstractDto where TEntity : class, IChangeLogAbstract { private readonly DbContext dbContext; @@ -18,6 +18,16 @@ public abstract class AbstractTimeSeriesDataRepository : ITimeSer this.dbContext = dbContext; } + public Task> GetAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task GetDatesRangeAsync(CancellationToken token) + { + throw new NotImplementedException(); + } + public Task> GetGtDate(DateTimeOffset date, CancellationToken token) { throw new NotImplementedException(); diff --git a/Persistence/Repositories/IGraphDataRepository.cs b/Persistence/Repositories/IGraphDataRepository.cs new file mode 100644 index 0000000..d110ffa --- /dev/null +++ b/Persistence/Repositories/IGraphDataRepository.cs @@ -0,0 +1,26 @@ +using Persistence.Models; + +namespace Persistence.Repositories; + +/// +/// Интерфейс по работе с прореженными данными +/// +public interface IGraphDataRepository + where TDto : class, new() +{ + /// + /// Получить список объектов с прореживанием + /// + /// дата начала + /// дата окончания + /// + /// + Task> GetThinnedDataAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, int approxPointsCount = 1024); + + /// + /// Получить диапазон дат, для которых есть данные в репозитории + /// + /// + /// + Task GetDatesRangeAsync(CancellationToken token); +} diff --git a/Persistence/Repositories/ISetpointRepository.cs b/Persistence/Repositories/ISetpointRepository.cs new file mode 100644 index 0000000..38bbbf4 --- /dev/null +++ b/Persistence/Repositories/ISetpointRepository.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Repositories; + +/// +/// Интерфейс по работе с уставками +/// +public interface ISetpointRepository +{ + + /// + /// Получить значения уставок за определенный момент времени + /// + /// + /// дата, на которую получаем данные + /// + /// + Task> GetHistoryAsync(IEnumerable setpoitKeys, DateTimeOffset historyMoment, CancellationToken token); + + /// + /// Получить историю изменений значений уставок + /// + /// + /// + /// + Task>> GetLogAsync(IEnumerable setpoitKeys, CancellationToken token); + + /// + /// Метод сохранения уставки + /// + /// ключ операции + /// ключ пользователя + /// значение + /// + /// + /// to do + /// id User учесть в соответствующем методе репозитория + Task SaveAsync(Guid setpointKey, int idUser, object newValue, CancellationToken token); +} diff --git a/Persistence/Repositories/ISyncRepository.cs b/Persistence/Repositories/ISyncRepository.cs index d1a6026..8fea16f 100644 --- a/Persistence/Repositories/ISyncRepository.cs +++ b/Persistence/Repositories/ISyncRepository.cs @@ -7,10 +7,10 @@ public interface ISyncRepository { /// - /// + /// Получить данные, начиная с определенной даты /// - /// + /// дата начала /// /// - Task> GetGtDate(DateTimeOffset date, CancellationToken token); + Task> GetGtDate(DateTimeOffset dateBegin, CancellationToken token); } diff --git a/Persistence/Repositories/ITableDataRepository.cs b/Persistence/Repositories/ITableDataRepository.cs new file mode 100644 index 0000000..22ec55c --- /dev/null +++ b/Persistence/Repositories/ITableDataRepository.cs @@ -0,0 +1,19 @@ +using Persistence.Models; + +namespace Persistence.Repositories; + +/// +/// Интерфейс по работе с табличными данными +/// +public interface ITableDataRepository + where TDto : class, new() + where TRequest : RequestDto +{ + /// + /// Получить страницу списка объектов + /// + /// параметры фильтрации + /// + /// + Task> GetAsync(TRequest request, CancellationToken token); +} diff --git a/Persistence/Repositories/ITimeSeriesDataRepository.cs b/Persistence/Repositories/ITimeSeriesDataRepository.cs index 036b4c4..e450c87 100644 --- a/Persistence/Repositories/ITimeSeriesDataRepository.cs +++ b/Persistence/Repositories/ITimeSeriesDataRepository.cs @@ -1,11 +1,29 @@ -namespace Persistence.Repositories; +using Persistence.Models; + +namespace Persistence.Repositories; /// /// Интерфейс по работе с временными данными /// -/// +/// public interface ITimeSeriesDataRepository : ISyncRepository + where TDto : class, ITimeSeriesAbstractDto { + /// + /// Получить страницу списка объектов + /// + /// дата начала + /// дата окончания + /// + /// + Task> GetAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token); + + /// + /// Получить диапазон дат, для которых есть данные в репозитории + /// + /// + /// + Task GetDatesRangeAsync(CancellationToken token); /// /// Добавление записей ///