Правки после ревью

This commit is contained in:
Olga Nemt 2025-02-21 12:25:22 +05:00
parent 4b7f55c3c8
commit a796024c69
12 changed files with 89 additions and 80 deletions

View File

@ -33,7 +33,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
CancellationToken token)
{
var userId = User.GetUserId<Guid>();
var changeLogCommit = new ChangeLogCommitDto(Uuid7.Guid(), comment);
var changeLogCommit = new ChangeLogCommitRequest(Uuid7.Guid(), comment);
var result = await service.AddRange(idDiscriminator, changeLogCommit, dtos, token);
return CreatedAtAction(nameof(AddRange), result);
@ -44,7 +44,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
public async Task<IActionResult> DeleteRange(IEnumerable<Guid> ids, string comment, CancellationToken token)
{
var userId = User.GetUserId<Guid>();
var changeLogCommit = new ChangeLogCommitDto(userId, comment);
var changeLogCommit = new ChangeLogCommitRequest(userId, comment);
var result = await service.MarkAsDeleted(ids, changeLogCommit, token);
return Ok(result);
@ -59,7 +59,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
CancellationToken token)
{
var userId = User.GetUserId<Guid>();
var changeLogCommit = new ChangeLogCommitDto(userId, comment);
var changeLogCommit = new ChangeLogCommitRequest(userId, comment);
var result = await service.ClearAndAddRange(idDiscriminator, changeLogCommit, dtos, token);
return Ok(result);
}
@ -72,7 +72,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
CancellationToken token)
{
var userId = User.GetUserId<Guid>();
var changeLogCommit = new ChangeLogCommitDto(userId, comment);
var changeLogCommit = new ChangeLogCommitRequest(userId, comment);
var result = await service.UpdateRange(changeLogCommit, dtos, token);
return Ok(result);

View File

@ -39,7 +39,7 @@ public class ChangeLogService
/// <param name="commitDto"></param>
/// <param name="token"></param>
/// <returns></returns>
private async Task<Guid> GetOrCreateCommitAsync(ChangeLogCommitDto commitDto, CancellationToken token)
private async Task<Guid> GetOrCreateCommitAsync(ChangeLogCommitRequest commitDto, CancellationToken token)
{
var key = (commitDto.IdAuthor, commitDto.Comment);
var commitId = await memoryCache.GetOrCreateAsync(key, async (cacheEntry) =>
@ -57,14 +57,14 @@ public class ChangeLogService
/// Добавление записи в журнал изменений
/// </summary>
/// <param name="idDiscriminator"></param>
/// <param name="commitDto"></param>
/// <param name="commitRequestDto"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<int> AddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token)
public async Task<int> AddRange(Guid idDiscriminator, ChangeLogCommitRequest commitRequestDto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token)
{
var commitId = await GetOrCreateCommitAsync(commitDto, token);
commitDto.Id = commitId;
var commitId = await GetOrCreateCommitAsync(commitRequestDto, token);
var commitDto = new ChangeLogCommitDto(commitId, commitRequestDto);
var result = await repository.AddRange(idDiscriminator, commitDto, dtos, token);
return result;
@ -74,13 +74,13 @@ public class ChangeLogService
/// Пометить запись журнала изменений как удаленную
/// </summary>
/// <param name="ids"></param>
/// <param name="commitDto"></param>
/// <param name="commitRequestDto"></param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<int> MarkAsDeleted(IEnumerable<Guid> ids, ChangeLogCommitDto commitDto, CancellationToken token)
public async Task<int> MarkAsDeleted(IEnumerable<Guid> ids, ChangeLogCommitRequest commitRequestDto, CancellationToken token)
{
var commitId = await GetOrCreateCommitAsync(commitDto, token);
commitDto.Id = commitId;
var commitId = await GetOrCreateCommitAsync(commitRequestDto, token);
var commitDto = new ChangeLogCommitDto(commitId, commitRequestDto);
var result = await repository.MarkAsDeleted(commitId, ids, commitDto.Creation, token);
@ -91,14 +91,14 @@ public class ChangeLogService
/// Очистить старые и добавить новые записи в журнал изменений
/// </summary>
/// <param name="idDiscriminator"></param>
/// <param name="commitDto"></param>
/// <param name="commitRequestDto"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<int> ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token)
public async Task<int> ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitRequest commitRequestDto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token)
{
var commitId = await GetOrCreateCommitAsync(commitDto, token);
commitDto.Id = commitId;
var commitId = await GetOrCreateCommitAsync(commitRequestDto, token);
var commitDto = new ChangeLogCommitDto(commitId, commitRequestDto);
var result = await repository.ClearAndAddRange(idDiscriminator, commitDto, dtos, token);
@ -108,16 +108,16 @@ public class ChangeLogService
/// <summary>
/// Обновить записи в журнале изменений
/// </summary>
/// <param name="changeLogCommit"></param>
/// <param name="commitRequestDto"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
public async Task<int> UpdateRange(ChangeLogCommitDto changeLogCommit, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token)
public async Task<int> UpdateRange(ChangeLogCommitRequest commitRequestDto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token)
{
var commitId = await GetOrCreateCommitAsync(changeLogCommit, token);
changeLogCommit.Id = commitId;
var commitId = await GetOrCreateCommitAsync(commitRequestDto, token);
var commitDto = new ChangeLogCommitDto(commitId, commitRequestDto);
var result = await repository.UpdateRange(changeLogCommit, dtos, token);
var result = await repository.UpdateRange(commitDto, dtos, token);
return result;
}

View File

@ -13,7 +13,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace DD.Persistence.Database.Postgres.Migrations
{
[DbContext(typeof(PersistencePostgresContext))]
[Migration("20250218121851_Init")]
[Migration("20250221053248_Init")]
partial class Init
{
/// <inheritdoc />
@ -41,10 +41,6 @@ namespace DD.Persistence.Database.Postgres.Migrations
.HasColumnType("uuid")
.HasComment("Дискриминатор таблицы");
b.Property<Guid>("IdAuthor")
.HasColumnType("uuid")
.HasComment("Автор изменения");
b.Property<Guid>("IdCreatedCommit")
.HasColumnType("uuid")
.HasComment("Id коммита на создание записи");

View File

@ -100,7 +100,6 @@ namespace DD.Persistence.Database.Postgres.Migrations
{
Id = table.Column<Guid>(type: "uuid", nullable: false, comment: "Ключ записи"),
DiscriminatorId = table.Column<Guid>(type: "uuid", nullable: false, comment: "Дискриминатор таблицы"),
IdAuthor = table.Column<Guid>(type: "uuid", nullable: false, comment: "Автор изменения"),
Creation = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false, comment: "Дата создания записи"),
Obsolete = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true, comment: "Дата устаревания (например при удалении)"),
IdNext = table.Column<Guid>(type: "uuid", nullable: true, comment: "Id заменяющей записи"),

View File

@ -38,10 +38,6 @@ namespace DD.Persistence.Database.Postgres.Migrations
.HasColumnType("uuid")
.HasComment("Дискриминатор таблицы");
b.Property<Guid>("IdAuthor")
.HasColumnType("uuid")
.HasComment("Автор изменения");
b.Property<Guid>("IdCreatedCommit")
.HasColumnType("uuid")
.HasComment("Id коммита на создание записи");

View File

@ -20,15 +20,15 @@ public class ChangeLogCommitRepository : IChangeLogCommitRepository
this.db = db;
}
public async Task<Guid> Add(ChangeLogCommitDto commitDto, CancellationToken token)
public async Task<Guid> Add(ChangeLogCommitRequest commitRequestDto, CancellationToken token)
{
var commit = new ChangeLogCommit()
{
Id = Uuid7.Guid(),
IdAuthor = commitDto.IdAuthor,
Comment = commitDto.Comment,
Creation = commitDto.Creation,
IdAuthor = commitRequestDto.IdAuthor,
Comment = commitRequestDto.Comment,
Creation = commitRequestDto.Creation,
};
db.Add(commit);

View File

@ -75,7 +75,7 @@ public class ChangeLogRepository : IChangeLogRepository
foreach (var entity in entities)
{
entity.Obsolete = updateTime;
entity.DiscriminatorId = idDiscriminator;
entity.DiscriminatorId = idCommit;
}
return await db.SaveChangesAsync(token);
@ -91,7 +91,7 @@ public class ChangeLogRepository : IChangeLogRepository
using var transaction = await db.Database.BeginTransactionAsync(token);
result += await MarkAsDeleted(idDiscriminator, commitDto.Id, commitDto.Creation, token);
result += await MarkAsDeleted(commitDto.Id, changeLogIds, commitDto.Creation, token);
result += await AddRange(idDiscriminator, commitDto, dtos, token);
await transaction.CommitAsync(token);
@ -104,17 +104,15 @@ public class ChangeLogRepository : IChangeLogRepository
var dbSet = db.Set<ChangeLog>();
var updatedIds = dtos.Select(d => d.Id);
var updatedEntities = await dbSet
var updatedEntities = dbSet
.Where(s => updatedIds.Contains(s.Id))
.ToArrayAsync(token);
var updatedEntitiesDict = updatedEntities.ToDictionary(s => s.Id);
.ToDictionary(s => s.Id);
using var transaction = await db.Database.BeginTransactionAsync(token);
foreach (var dto in dtos)
{
var updatedEntity = updatedEntitiesDict.GetValueOrDefault(dto.Id);
var updatedEntity = updatedEntities.GetValueOrDefault(dto.Id);
if (updatedEntity is null)
{
throw new ArgumentException($"Entity with id = {dto.Id} doesn't exist in Db", nameof(dto));

View File

@ -0,0 +1,21 @@
namespace DD.Persistence.Models.Requests;
/// <summary>
/// Модель коммита с изменениями
/// </summary>
public class ChangeLogCommitDto : ChangeLogCommitRequest
{
/// <summary>
/// Id
/// </summary>
public Guid Id { get; set; }
/// <summary>
///
/// </summary>
public ChangeLogCommitDto(Guid id, ChangeLogCommitRequest request) : base(request.IdAuthor, request.Comment)
{
Id = id;
}
}

View File

@ -3,13 +3,8 @@
/// <summary>
/// Модель коммита с изменениями
/// </summary>
public class ChangeLogCommitDto
public class ChangeLogCommitRequest
{
/// <summary>
/// Id
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// Дата создания
/// </summary>
@ -28,7 +23,7 @@ public class ChangeLogCommitDto
/// <summary>
///
/// </summary>
public ChangeLogCommitDto(Guid idAuthor, string comment)
public ChangeLogCommitRequest(Guid idAuthor, string comment)
{
IdAuthor = idAuthor;
Comment = comment;

View File

@ -26,10 +26,11 @@ public class ChangeLogTest
var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid();
var comment = "Добавление нескольких значений";
var commit = new ChangeLogCommitDto(expectedCommitId, comment);
var commitRequest = new ChangeLogCommitRequest(Uuid7.Guid(), comment);
var commit = new ChangeLogCommitDto(expectedCommitId, commitRequest);
var dtos = GenerateChangeLogValuesDto(2);
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitDto>(), Arg.Any<CancellationToken>()).Returns(Uuid7.Guid());
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitRequest>(), Arg.Any<CancellationToken>()).Returns(Uuid7.Guid());
changeLogRepository
.AddRange(
Arg.Any<Guid>(),
@ -40,13 +41,13 @@ public class ChangeLogTest
//act
var addRangeResult = await service
.AddRange(discriminatorId, commit, dtos, CancellationToken.None);
.AddRange(discriminatorId, commitRequest, dtos, CancellationToken.None);
addRangeResult = await service
.AddRange(discriminatorId, commit, dtos, CancellationToken.None);
.AddRange(discriminatorId, commitRequest, dtos, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(2).AddRange(discriminatorId, commit, dtos, CancellationToken.None);
await changeLogCommitRepository.Received(1).Add(commitRequest, CancellationToken.None);
await changeLogRepository.Received(2).AddRange(discriminatorId, Arg.Any<ChangeLogCommitDto>(), dtos, CancellationToken.None);
}
[Fact]
@ -54,14 +55,14 @@ public class ChangeLogTest
{
//arrange
var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid();
var comment = "Изменение нескольких значений";
var commit = new ChangeLogCommitDto(Uuid7.Guid(), comment);
commit.Id = Uuid7.Guid();
var commitRequest = new ChangeLogCommitRequest(Uuid7.Guid(), comment);
var commit = new ChangeLogCommitDto(expectedCommitId, commitRequest);
var dtos = GenerateChangeLogValuesDto(2);
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitDto>(), Arg.Any<CancellationToken>()).Returns(commit.Id);
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitRequest>(), Arg.Any<CancellationToken>()).Returns(commit.Id);
changeLogRepository
.UpdateRange(
@ -69,19 +70,20 @@ public class ChangeLogTest
Arg.Any<IEnumerable<ChangeLogValuesDto>>(),
Arg.Any<CancellationToken>())
.Returns(2);
//act
var updateRangeResult = await service
.UpdateRange(commit, dtos, CancellationToken.None);
.UpdateRange(commitRequest, dtos, CancellationToken.None);
updateRangeResult = await service
.UpdateRange(commit, dtos, CancellationToken.None);
.UpdateRange(commitRequest, dtos, CancellationToken.None);
updateRangeResult = await service
.UpdateRange(commit, dtos, CancellationToken.None);
.UpdateRange(commitRequest, dtos, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(3).UpdateRange(commit, dtos, CancellationToken.None);
await changeLogCommitRepository.Received(1).Add(commitRequest, CancellationToken.None);
await changeLogRepository.Received(3).UpdateRange(Arg.Any<ChangeLogCommitDto>(), dtos, CancellationToken.None);
}
[Fact]
@ -91,11 +93,12 @@ public class ChangeLogTest
var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid();
var comment = "Удаление нескольких значений";
var commit = new ChangeLogCommitDto(expectedCommitId, comment);
var commitRequest = new ChangeLogCommitRequest(Uuid7.Guid(), comment);
var commit = new ChangeLogCommitDto(expectedCommitId, commitRequest);
var dtos = GenerateChangeLogValuesDto(2);
var dtoIds = dtos.Select(d => d.Id);
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitDto>(), Arg.Any<CancellationToken>()).Returns(Uuid7.Guid());
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitRequest>(), Arg.Any<CancellationToken>()).Returns(expectedCommitId);
changeLogRepository
.MarkAsDeleted(
Arg.Any<Guid>(),
@ -106,13 +109,13 @@ public class ChangeLogTest
//act
var markAsDeletedResult = await service
.MarkAsDeleted(dtoIds, commit, CancellationToken.None);
.MarkAsDeleted(dtoIds, commitRequest, CancellationToken.None);
markAsDeletedResult = await service
.MarkAsDeleted(dtoIds, commit, CancellationToken.None);
.MarkAsDeleted(dtoIds, commitRequest, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(2).MarkAsDeleted(commit.Id, dtoIds, commit.Creation, CancellationToken.None);
await changeLogCommitRepository.Received(1).Add(commitRequest, CancellationToken.None);
await changeLogRepository.Received(2).MarkAsDeleted(commit.Id, dtoIds, Arg.Any<DateTimeOffset>(), CancellationToken.None);
}
[Fact]
@ -122,11 +125,12 @@ public class ChangeLogTest
var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid();
var comment = "Удаление и добавление нескольких значений";
var commit = new ChangeLogCommitDto(expectedCommitId, comment);
var commitRequest = new ChangeLogCommitRequest(expectedCommitId, comment);
var commit = new ChangeLogCommitDto(expectedCommitId, commitRequest);
var dtos = GenerateChangeLogValuesDto(2);
var dtoIds = dtos.Select(d => d.Id);
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitDto>(), Arg.Any<CancellationToken>()).Returns(Uuid7.Guid());
changeLogCommitRepository.Add(Arg.Any<ChangeLogCommitRequest>(), Arg.Any<CancellationToken>()).Returns(Uuid7.Guid());
changeLogRepository
.ClearAndAddRange(
Arg.Any<Guid>(),
@ -137,13 +141,13 @@ public class ChangeLogTest
//act
var clearAndAddResult = await service
.ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None);
.ClearAndAddRange(discriminatorId, commitRequest, dtos, CancellationToken.None);
clearAndAddResult = await service
.ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None);
.ClearAndAddRange(discriminatorId, commitRequest, dtos, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(2).ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None);
await changeLogCommitRepository.Received(1).Add(commitRequest, CancellationToken.None);
await changeLogRepository.Received(2).ClearAndAddRange(discriminatorId, Arg.Any<ChangeLogCommitDto>(), dtos, CancellationToken.None);
}
[Fact]

View File

@ -18,5 +18,5 @@ public interface IChangeLogCommitRepository
/// <param name="commitDto"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<Guid> Add(ChangeLogCommitDto commitDto, CancellationToken token);
Task<Guid> Add(ChangeLogCommitRequest commitDto, CancellationToken token);
}

View File

@ -44,11 +44,11 @@ public interface IChangeLogRepository : ISyncWithDiscriminatorRepository<ChangeL
/// Очистить и добавить новые
/// </summary>
/// <param name="idDiscriminator"></param>
/// <param name="commitDto">коммит с изменениями</param>
/// <param name="dto">коммит с изменениями</param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token);
Task<int> ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitDto dto, IEnumerable<ChangeLogValuesDto> dtos, CancellationToken token);
/// <summary>
/// Редактирование записей