From 4b7f55c3c88711eed67f2bab686580967b8d5c81 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: Thu, 20 Feb 2025 18:30:56 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ChangeLogController.cs | 23 +++++++++--------- .../Services/ChangeLogService.cs | 2 +- DD.Persistence.Database/Entity/ChangeLog.cs | 3 --- .../EntityAbstractions/IChangeLog.cs | 5 ---- .../Repositories/ChangeLogRepository.cs | 14 +++++------ DD.Persistence.Test/ChangeLogTest.cs | 24 +++++++++++++++++-- 6 files changed, 41 insertions(+), 30 deletions(-) diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs index e01193d..25d478b 100644 --- a/DD.Persistence.API/Controllers/ChangeLogController.cs +++ b/DD.Persistence.API/Controllers/ChangeLogController.cs @@ -1,13 +1,12 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using DD.Persistence.Models; -using DD.Persistence.Models.Requests; -using DD.Persistence.Repositories; -using System.Net; -using DD.Persistence.Models.Common; +using DD.Persistence.API; using DD.Persistence.API.Services; - -namespace DD.Persistence.API.Controllers; +using DD.Persistence.Models; +using DD.Persistence.Models.Common; +using DD.Persistence.Models.Requests; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Net; +using UuidExtensions; [ApiController] [Authorize] @@ -34,7 +33,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi CancellationToken token) { var userId = User.GetUserId(); - var changeLogCommit = new ChangeLogCommitDto(userId, comment); + var changeLogCommit = new ChangeLogCommitDto(Uuid7.Guid(), comment); var result = await service.AddRange(idDiscriminator, changeLogCommit, dtos, token); return CreatedAtAction(nameof(AddRange), result); @@ -209,7 +208,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi IdEditor = userId, IdNext = changeLogItemCurrentId, Obsolete = DateTimeOffset.UtcNow.AddDays(-5), - Value = new ChangeLogValuesDto(){ + Value = new ChangeLogValuesDto(){ Id = Guid.CreateVersion7(), Value = new Dictionary() { ["1"] = new { id = 1, caption = "Изменение 1" }, @@ -219,7 +218,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi } }; var result = new List() { - new() { + new() { Comment = "Петров И. Ю. попросил внести изменения", DateTime = changeLogItemCreation, DiscriminatorId = Guid.CreateVersion7(), diff --git a/DD.Persistence.API/Services/ChangeLogService.cs b/DD.Persistence.API/Services/ChangeLogService.cs index 5b33cd8..b84a9bc 100644 --- a/DD.Persistence.API/Services/ChangeLogService.cs +++ b/DD.Persistence.API/Services/ChangeLogService.cs @@ -34,7 +34,7 @@ public class ChangeLogService } /// - /// Создание или чтение данных коммита + /// Чтение ключа коммита из кеша или (если коммита в кеше нет) создание коммита /// /// /// diff --git a/DD.Persistence.Database/Entity/ChangeLog.cs b/DD.Persistence.Database/Entity/ChangeLog.cs index 152f7a8..3621795 100644 --- a/DD.Persistence.Database/Entity/ChangeLog.cs +++ b/DD.Persistence.Database/Entity/ChangeLog.cs @@ -19,9 +19,6 @@ public class ChangeLog : IDiscriminatorItem, IChangeLog [Comment("Дискриминатор таблицы")] public Guid DiscriminatorId { get; set; } - [Comment("Автор изменения")] - public Guid IdAuthor { get; set; } - [Comment("Дата создания записи")] public DateTimeOffset Creation { get; set; } diff --git a/DD.Persistence.Database/EntityAbstractions/IChangeLog.cs b/DD.Persistence.Database/EntityAbstractions/IChangeLog.cs index 3e8a41b..bb5e68a 100644 --- a/DD.Persistence.Database/EntityAbstractions/IChangeLog.cs +++ b/DD.Persistence.Database/EntityAbstractions/IChangeLog.cs @@ -10,11 +10,6 @@ public interface IChangeLog /// public Guid Id { get; set; } - /// - /// Автор изменения - /// - public Guid IdAuthor { get; set; } - /// /// Дата создания записи /// diff --git a/DD.Persistence.Database/Repositories/ChangeLogRepository.cs b/DD.Persistence.Database/Repositories/ChangeLogRepository.cs index c1d01dd..a0fb8df 100644 --- a/DD.Persistence.Database/Repositories/ChangeLogRepository.cs +++ b/DD.Persistence.Database/Repositories/ChangeLogRepository.cs @@ -28,7 +28,6 @@ public class ChangeLogRepository : IChangeLogRepository { Id = Uuid7.Guid(), Creation = commitDto.Creation, - IdAuthor = commitDto.IdAuthor, DiscriminatorId = idDiscriminator, Value = values.Value, IdCreatedCommit = commitDto.Id, @@ -76,7 +75,7 @@ public class ChangeLogRepository : IChangeLogRepository foreach (var entity in entities) { entity.Obsolete = updateTime; - entity.DiscriminatorId = idCommit; + entity.DiscriminatorId = idDiscriminator; } return await db.SaveChangesAsync(token); @@ -92,7 +91,7 @@ public class ChangeLogRepository : IChangeLogRepository using var transaction = await db.Database.BeginTransactionAsync(token); - result += await MarkAsDeleted(commitDto.Id, changeLogIds, commitDto.Creation, token); + result += await MarkAsDeleted(idDiscriminator, commitDto.Id, commitDto.Creation, token); result += await AddRange(idDiscriminator, commitDto, dtos, token); await transaction.CommitAsync(token); @@ -105,15 +104,17 @@ public class ChangeLogRepository : IChangeLogRepository var dbSet = db.Set(); var updatedIds = dtos.Select(d => d.Id); - var updatedEntities = dbSet + var updatedEntities = await dbSet .Where(s => updatedIds.Contains(s.Id)) - .ToDictionary(s => s.Id); + .ToArrayAsync(token); + + var updatedEntitiesDict = updatedEntities.ToDictionary(s => s.Id); using var transaction = await db.Database.BeginTransactionAsync(token); foreach (var dto in dtos) { - var updatedEntity = updatedEntities.GetValueOrDefault(dto.Id); + var updatedEntity = updatedEntitiesDict.GetValueOrDefault(dto.Id); if (updatedEntity is null) { throw new ArgumentException($"Entity with id = {dto.Id} doesn't exist in Db", nameof(dto)); @@ -123,7 +124,6 @@ public class ChangeLogRepository : IChangeLogRepository { Id = Uuid7.Guid(), Creation = commitDto.Creation, - IdAuthor = commitDto.IdAuthor, DiscriminatorId = updatedEntity.DiscriminatorId, Value = dto.Value, IdCreatedCommit = commitDto.Id, diff --git a/DD.Persistence.Test/ChangeLogTest.cs b/DD.Persistence.Test/ChangeLogTest.cs index d302bd3..bc5c0ad 100644 --- a/DD.Persistence.Test/ChangeLogTest.cs +++ b/DD.Persistence.Test/ChangeLogTest.cs @@ -22,6 +22,7 @@ public class ChangeLogTest [Fact] public async Task AddRange() { + //arrange var discriminatorId = Uuid7.Guid(); var expectedCommitId = Uuid7.Guid(); var comment = "Добавление нескольких значений"; @@ -37,11 +38,13 @@ public class ChangeLogTest Arg.Any()) .Returns(2); + //act var addRangeResult = await service .AddRange(discriminatorId, commit, dtos, CancellationToken.None); addRangeResult = await service .AddRange(discriminatorId, commit, dtos, CancellationToken.None); + //assert await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogRepository.Received(2).AddRange(discriminatorId, commit, dtos, CancellationToken.None); } @@ -49,6 +52,7 @@ public class ChangeLogTest [Fact] public async Task UpdateRange() { + //arrange var discriminatorId = Uuid7.Guid(); var comment = "Изменение нескольких значений"; @@ -65,7 +69,7 @@ public class ChangeLogTest Arg.Any>(), Arg.Any()) .Returns(2); - + //act var updateRangeResult = await service .UpdateRange(commit, dtos, CancellationToken.None); @@ -75,6 +79,7 @@ public class ChangeLogTest updateRangeResult = await service .UpdateRange(commit, dtos, CancellationToken.None); + //assert await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogRepository.Received(3).UpdateRange(commit, dtos, CancellationToken.None); } @@ -82,6 +87,7 @@ public class ChangeLogTest [Fact] public async Task MarkAsDeleted() { + //arrange var discriminatorId = Uuid7.Guid(); var expectedCommitId = Uuid7.Guid(); var comment = "Удаление нескольких значений"; @@ -98,11 +104,13 @@ public class ChangeLogTest Arg.Any()) .Returns(2); + //act var markAsDeletedResult = await service .MarkAsDeleted(dtoIds, commit, CancellationToken.None); markAsDeletedResult = await service .MarkAsDeleted(dtoIds, commit, CancellationToken.None); + //assert await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogRepository.Received(2).MarkAsDeleted(commit.Id, dtoIds, commit.Creation, CancellationToken.None); } @@ -110,6 +118,7 @@ public class ChangeLogTest [Fact] public async Task ClearAndAddRange() { + //arrange var discriminatorId = Uuid7.Guid(); var expectedCommitId = Uuid7.Guid(); var comment = "Удаление и добавление нескольких значений"; @@ -126,11 +135,13 @@ public class ChangeLogTest Arg.Any()) .Returns(2); + //act var clearAndAddResult = await service .ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); clearAndAddResult = await service .ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); + //assert await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogRepository.Received(2).ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); } @@ -138,6 +149,7 @@ public class ChangeLogTest [Fact] public async Task GetByDate() { + //arrange var discriminatorId = Uuid7.Guid(); var paginationRequest = new PaginationRequest() { @@ -162,9 +174,11 @@ public class ChangeLogTest Arg.Any()) .Returns(items); + //act var actualItems = await service .GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None); + //assert await changeLogRepository.Received(1).GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None); } @@ -172,9 +186,10 @@ public class ChangeLogTest [Fact] public async Task GetChangeLogForInterval() { + //arrange var discriminatorId = Uuid7.Guid(); var dtos = GenerateChangeLogDto(5); - ; + var dateBegin = DateTimeOffset.UtcNow.AddDays(-5); var dateEnd = DateTimeOffset.UtcNow; @@ -186,9 +201,11 @@ public class ChangeLogTest Arg.Any()) .Returns(dtos); + //act var actualItems = await service .GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None); + //assert await changeLogRepository.Received(1).GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None); } @@ -196,6 +213,7 @@ public class ChangeLogTest [Fact] public async Task GetDatesChange() { + //arrange var discriminatorId = Uuid7.Guid(); var dateBegin = DateTimeOffset.UtcNow.AddDays(-5); @@ -212,9 +230,11 @@ public class ChangeLogTest Arg.Any()) .Returns(dtos); + //act var actualItems = await service .GetDatesChange(discriminatorId, CancellationToken.None); + //assert await changeLogRepository.Received(1).GetDatesChange(discriminatorId, CancellationToken.None); }