diff --git a/Persistence.sln b/Persistence.sln new file mode 100644 index 0000000..ea65a82 --- /dev/null +++ b/Persistence.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34714.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Persistence", "Persistence\Persistence.csproj", "{417177AE-A27E-445B-B3B9-D5EFCEC812A0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {417177AE-A27E-445B-B3B9-D5EFCEC812A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {417177AE-A27E-445B-B3B9-D5EFCEC812A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {417177AE-A27E-445B-B3B9-D5EFCEC812A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {417177AE-A27E-445B-B3B9-D5EFCEC812A0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B9055079-BB6F-482E-A0B7-39421CF2674E} + EndGlobalSection +EndGlobal diff --git a/Persistence/ClassDiagram.cd b/Persistence/ClassDiagram.cd new file mode 100644 index 0000000..4a6aa87 --- /dev/null +++ b/Persistence/ClassDiagram.cd @@ -0,0 +1,71 @@ + + + + + + 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/Persistence.csproj b/Persistence/Persistence.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/Persistence/Persistence.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/Persistence/Repositories/AbstractChangeLogRepository.cs b/Persistence/Repositories/AbstractChangeLogRepository.cs new file mode 100644 index 0000000..fa68b20 --- /dev/null +++ b/Persistence/Repositories/AbstractChangeLogRepository.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Repositories; +public abstract class AbstractChangeLogRepository : IChangeLogRepository +{ + public Task Clear(int idUser, TRequest request, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task ClearAndInsertRange(int idUser, TRequest request, IEnumerable dtos, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task> GetCurrent(TRequest request, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task> GetDatesChange(TRequest request, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task> GetGtDate(DateTimeOffset date, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task InsertRange(int idUser, IEnumerable dtos, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task MarkAsDeleted(int idUser, IEnumerable ids, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task UpdateOrInsertRange(int idUser, IEnumerable dtos, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task UpdateRange(int idUser, IEnumerable dtos, CancellationToken token) + { + throw new NotImplementedException(); + } +} diff --git a/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs b/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs new file mode 100644 index 0000000..92a1ccf --- /dev/null +++ b/Persistence/Repositories/AbstractTimeSeriesDataRepository.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Persistence.Repositories; +public abstract class AbstractTimeSeriesDataRepository : ITimeSeriesDataRepository +{ + public Task> GetGtDate(DateTimeOffset date, CancellationToken token) + { + throw new NotImplementedException(); + } +} diff --git a/Persistence/Repositories/IChangeLogRepository.cs b/Persistence/Repositories/IChangeLogRepository.cs new file mode 100644 index 0000000..dc2aade --- /dev/null +++ b/Persistence/Repositories/IChangeLogRepository.cs @@ -0,0 +1,95 @@ +namespace Persistence.Repositories; + +/// +/// +/// +/// +public interface IChangeLogRepository : ISyncRepository +{ + /// + /// Добавление записей + /// + /// пользователь, который добавляет + /// + /// + /// + Task InsertRange(int idUser, IEnumerable dtos, CancellationToken token); + + /// + /// Редактирование записей + /// + /// пользователь, который редактирует + /// + /// + /// + Task UpdateRange(int idUser, IEnumerable dtos, CancellationToken token); + + /// + /// Добавляет Dto у которых id == 0, изменяет dto у которых id != 0 + /// + /// пользователь, который редактирует или добавляет + /// + /// + /// + Task UpdateOrInsertRange(int idUser, IEnumerable dtos, CancellationToken token); + + /// + /// Помечает записи как удаленные + /// + /// пользователь, который чистит + /// Фильтр по свойствам конкретной сущности + /// + /// + Task Clear(int idUser, TRequest request, CancellationToken token); + + /// + /// Очистить и добавить новые + /// + /// + /// + /// + /// + /// + Task ClearAndInsertRange(int idUser, TRequest request, IEnumerable dtos, CancellationToken token); + + /// + /// Пометить записи как удаленные + /// + /// + /// + /// + /// + Task MarkAsDeleted(int idUser, IEnumerable ids, CancellationToken token); + + /// + /// Получение дат изменений записей + /// + /// + /// + /// + Task> GetDatesChange(TRequest request, CancellationToken token); + + /// + /// Получение измененных записей за определенную дату + /// + /// + /// Фильтр по дате. Если null - вернет все записи, без привязки к дате + /// + /// + //Task>> GetChangeLogForDate(TRequest request, DateOnly? date, CancellationToken token); + + /// + /// Получение текущих сейчас записей по параметрам + /// + /// + /// + /// + Task> GetCurrent(TRequest request, CancellationToken token); + + /// + /// Получение объекта, реализующего интерфейс IChangeLogRepositoryBuilder + /// для последующих вызовов методов фильтрации по запросам + /// + /// + //IChangeLogQueryBuilder GetQueryBuilder(ChangeLogRequest request); +} diff --git a/Persistence/Repositories/ISyncRepository.cs b/Persistence/Repositories/ISyncRepository.cs new file mode 100644 index 0000000..6e320f9 --- /dev/null +++ b/Persistence/Repositories/ISyncRepository.cs @@ -0,0 +1,16 @@ +namespace Persistence.Repositories; + +/// +/// +/// +/// +public interface ISyncRepository +{ + /// + /// + /// + /// + /// + /// + Task> GetGtDate(DateTimeOffset date, CancellationToken token); +} diff --git a/Persistence/Repositories/ITimeSeriesDataRepository.cs b/Persistence/Repositories/ITimeSeriesDataRepository.cs new file mode 100644 index 0000000..c246366 --- /dev/null +++ b/Persistence/Repositories/ITimeSeriesDataRepository.cs @@ -0,0 +1,10 @@ +namespace Persistence.Repositories; + +/// +/// +/// +/// +public interface ITimeSeriesDataRepository : ISyncRepository +{ + +} diff --git a/Persistence/Services/ArchiveService.cs b/Persistence/Services/ArchiveService.cs new file mode 100644 index 0000000..34c48c2 --- /dev/null +++ b/Persistence/Services/ArchiveService.cs @@ -0,0 +1,4 @@ +namespace Persistence.Services; +public abstract class ArchiveService : IArchiveService +{ +} diff --git a/Persistence/Services/IArchiveService.cs b/Persistence/Services/IArchiveService.cs new file mode 100644 index 0000000..83c0cd9 --- /dev/null +++ b/Persistence/Services/IArchiveService.cs @@ -0,0 +1,4 @@ +namespace Persistence.Services; +internal interface IArchiveService +{ +} diff --git a/Persistence/Services/ITimeSeriesDataObserverService.cs b/Persistence/Services/ITimeSeriesDataObserverService.cs new file mode 100644 index 0000000..0e0a2c0 --- /dev/null +++ b/Persistence/Services/ITimeSeriesDataObserverService.cs @@ -0,0 +1,4 @@ +namespace Persistence.Services; +public interface ITimeSeriesDataObserverService +{ +} diff --git a/Persistence/Services/TimeSeriesDataObserverService.cs b/Persistence/Services/TimeSeriesDataObserverService.cs new file mode 100644 index 0000000..7785928 --- /dev/null +++ b/Persistence/Services/TimeSeriesDataObserverService.cs @@ -0,0 +1,4 @@ +namespace Persistence.Services; +public abstract class TimeSeriesDataObserverService : ITimeSeriesDataObserverService +{ +}