diff --git a/Persistence/API/IApiChangeLog.cs b/Persistence/API/IApiChangeLog.cs new file mode 100644 index 0000000..61af1e8 --- /dev/null +++ b/Persistence/API/IApiChangeLog.cs @@ -0,0 +1,79 @@ +using Persistence.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.API; + +/// +/// Интерфейс для работы с API, предназначенного для CRUD-операций над данными +/// +public interface IApiChangeLog + where TDto : class, new() + where TChangeLogDto : ChangeLogDto +{ + /// + /// Получение исторических данных на текущую дату + /// + /// + /// + Task> GetChangeLogCurrent(CancellationToken token); + + /// + /// Получение исторических данных на определенную дату + /// + /// + /// + /// + Task> GetChangeLogForDate(DateTimeOffset historyMoment, CancellationToken token); + + /// + /// Добавить одну запись + /// + /// + /// + /// + Task AddAsync(TDto dto, CancellationToken token); + + /// + /// Добавить несколько записей + /// + /// + /// + /// + Task AddRangeAsync(IEnumerable dtos, CancellationToken token); + + /// + /// Обновить одну запись + /// + /// + /// + /// + Task UpdateAsync(TDto dto, CancellationToken token); + + /// + /// Обновить несколько записей + /// + /// + /// + /// + Task UpdateRangeAsync(IEnumerable dtos, CancellationToken token); + + /// + /// Удалить одну запись + /// + /// + /// + /// + Task DeleteAsync(int id, CancellationToken token); + + /// + /// Удалить несколько записей + /// + /// + /// + /// + Task DeleteRangeAsync(IEnumerable ids, CancellationToken token); +} diff --git a/Persistence/API/IApiDictionaryElement.cs b/Persistence/API/IApiDictionaryElement.cs new file mode 100644 index 0000000..38cc68f --- /dev/null +++ b/Persistence/API/IApiDictionaryElement.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.API; + +/// +/// Интерфейс для API, предназначенного для работы со справочниками +/// +public interface IApiDictionaryElement where TDto : class, new() +{ + /// + /// Получить все данные справочника + /// + /// ключ справочника + /// + /// + Task> GetDataAsync(Guid dictionaryKey, CancellationToken token); + + /// + /// Добавить элемент в справочник + /// + /// ключ справочника + /// + /// + /// + Task AddAsync(Guid dictionaryKey, TDto dto, CancellationToken token); + + /// + /// Изменить одну запись + /// + /// ключ справочника + /// ключ элемента в справочнике + /// + /// + /// + Task UpdateAsync(Guid dictionaryKey, Guid dictionaryElementKey, TDto dto, CancellationToken token); + + /// + /// Удалить одну запись + /// + /// ключ справочника + /// ключ элемента в справочнике + /// + /// + Task DeleteAsync(Guid dictionaryKey, Guid dictionaryElementKey, CancellationToken token); +} diff --git a/Persistence/API/IApiSetpoint.cs b/Persistence/API/IApiSetpoint.cs new file mode 100644 index 0000000..6c113dd --- /dev/null +++ b/Persistence/API/IApiSetpoint.cs @@ -0,0 +1,47 @@ +using Microsoft.AspNetCore.Mvc; +using Persistence.Models; +using System.Threading.Tasks; + +namespace Persistence.API; + +/// +/// Интерфейс для работы с API, предназначенного для работы с уставками +/// +public interface IApiSetpoint +{ + /// + /// Получить актуальные значения уставок + /// + /// + /// + /// + Task>> GetCurrentAsync(IEnumerable setpoitKeys, CancellationToken token); + + /// + /// Получить значения уставок за определенный момент времени + /// + /// + /// дата, на которую получаем данные + /// + /// + Task> GetHistoryAsync(IEnumerable setpoitKeys, DateTimeOffset historyMoment, CancellationToken token); + + /// + /// Получить историю изменений значений уставок + /// + /// + /// + /// + Task>> GetLogAsync(IEnumerable setpoitKeys, CancellationToken token); + + /// + /// Метод сохранения уставки + /// + /// ключ операции + /// значение + /// + /// + /// to do + /// id User учесть в соответствующем методе репозитория + Task SaveAsync(Guid setpointKey, object newValue, CancellationToken token); +} diff --git a/Persistence/API/IApiSync.cs b/Persistence/API/IApiSync.cs new file mode 100644 index 0000000..3df36b2 --- /dev/null +++ b/Persistence/API/IApiSync.cs @@ -0,0 +1,30 @@ +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 IApiSync where TDto : class, new() +{ + /// + /// Получить порцию записей, начиная с заданной даты + /// + /// + /// количество записей + /// + /// + Task> GetPartAsync(DateTimeOffset dateBegin, int take = 24 * 60 * 60, CancellationToken token = default); + + /// + /// Получить диапазон дат, для которых есть данные в репозитории + /// + /// + /// + Task GetDatesRangeAsync(CancellationToken token); +} diff --git a/Persistence/API/IApiTableData.cs b/Persistence/API/IApiTableData.cs new file mode 100644 index 0000000..bbdad57 --- /dev/null +++ b/Persistence/API/IApiTableData.cs @@ -0,0 +1,25 @@ +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 IApiTableData + where TDto : class, new() + where TRequest : RequestDto +{ + /// + /// Получить страницу списка объектов + /// + /// + /// + /// строка с настройками сортировки + /// параметры фильтрации + /// + /// + Task> GetPageAsync(TRequest request, CancellationToken token); +} diff --git a/Persistence/API/IGraphData.cs b/Persistence/API/IGraphData.cs new file mode 100644 index 0000000..ff020f1 --- /dev/null +++ b/Persistence/API/IGraphData.cs @@ -0,0 +1,25 @@ +using Persistence.Models; + +namespace Persistence.API; + +/// +/// Интерфейс для работы с API графиков +/// +public interface IGraphData +{ + /// + /// Получить список объектов с прореживанием + /// + /// дата начала + /// дата окончания + /// + /// + Task> GetThinnedDataAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, int approxPointsCount = 1024); + + /// + /// Получить диапазон дат, для которых есть данные в репозитории + /// + /// + /// + Task GetDatesRangeAsync(CancellationToken token); +} diff --git a/Persistence/Models/DatesRangeDto.cs b/Persistence/Models/DatesRangeDto.cs new file mode 100644 index 0000000..5f41083 --- /dev/null +++ b/Persistence/Models/DatesRangeDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Models; +public class DatesRangeDto +{ + public DateTimeOffset dateBegin { get; set; } + + public DateTimeOffset dateEnd { get; set; } +} diff --git a/Persistence/Models/PaginationContainer.cs b/Persistence/Models/PaginationContainer.cs new file mode 100644 index 0000000..a0c64b2 --- /dev/null +++ b/Persistence/Models/PaginationContainer.cs @@ -0,0 +1,36 @@ +namespace Persistence.Models; + +/// +/// Контейнер для поддержки постраничного просмотра таблиц +/// +/// +public class PaginationContainer +{ + /// + /// конструктор + /// + public PaginationContainer() + { + Items = Enumerable.Empty(); + } + + /// + /// Кол-во записей пропущенных с начала таблицы в запросе от api + /// + public int Skip { get; set; } + + /// + /// Кол-во записей в запросе от api + /// + public int Take { get; set; } + + /// + /// Кол-во записей всего в таблице + /// + public int Count { get; set; } + + /// + /// Данные + /// + public IEnumerable Items { get; set; } +} \ No newline at end of file diff --git a/Persistence/Models/RequestDto.cs b/Persistence/Models/RequestDto.cs new file mode 100644 index 0000000..d27d210 --- /dev/null +++ b/Persistence/Models/RequestDto.cs @@ -0,0 +1,10 @@ +namespace Persistence.Models; + +public class RequestDto +{ + public int Skip { get; set; } + + public int Take { get; set; } + + public string SortSettings { get; set; } = string.Empty; +} diff --git a/Persistence/Models/SetpointDescriptionDto.cs b/Persistence/Models/SetpointDescriptionDto.cs new file mode 100644 index 0000000..27005b0 --- /dev/null +++ b/Persistence/Models/SetpointDescriptionDto.cs @@ -0,0 +1,15 @@ +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/Models/SetpointLogDto.cs b/Persistence/Models/SetpointLogDto.cs new file mode 100644 index 0000000..8c259ca --- /dev/null +++ b/Persistence/Models/SetpointLogDto.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Models; +public class SetpointLogDto : SetpointValueDto +{ + public DateTimeOffset Edit { get; set; } + public int IdUser { get; set; } +} diff --git a/Persistence/Models/SetpointValueDto.cs b/Persistence/Models/SetpointValueDto.cs new file mode 100644 index 0000000..7b49143 --- /dev/null +++ b/Persistence/Models/SetpointValueDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Models; + +public class SetpointValueDto +{ + public int Id { get; set; } + public object Value { get; set; } +} + diff --git a/Persistence/Persistence.csproj b/Persistence/Persistence.csproj index 1bd718e..aaccee7 100644 --- a/Persistence/Persistence.csproj +++ b/Persistence/Persistence.csproj @@ -7,6 +7,7 @@ +