Правка по результатам ревью

This commit is contained in:
Оля Бизюкова 2025-02-20 18:30:56 +05:00
parent 523c15093f
commit 4b7f55c3c8
6 changed files with 41 additions and 30 deletions

View File

@ -1,13 +1,12 @@
using Microsoft.AspNetCore.Authorization; using DD.Persistence.API;
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.Services; using DD.Persistence.API.Services;
using DD.Persistence.Models;
namespace DD.Persistence.API.Controllers; using DD.Persistence.Models.Common;
using DD.Persistence.Models.Requests;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Net;
using UuidExtensions;
[ApiController] [ApiController]
[Authorize] [Authorize]
@ -34,7 +33,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
CancellationToken token) CancellationToken token)
{ {
var userId = User.GetUserId<Guid>(); var userId = User.GetUserId<Guid>();
var changeLogCommit = new ChangeLogCommitDto(userId, comment); var changeLogCommit = new ChangeLogCommitDto(Uuid7.Guid(), comment);
var result = await service.AddRange(idDiscriminator, changeLogCommit, dtos, token); var result = await service.AddRange(idDiscriminator, changeLogCommit, dtos, token);
return CreatedAtAction(nameof(AddRange), result); return CreatedAtAction(nameof(AddRange), result);
@ -209,7 +208,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
IdEditor = userId, IdEditor = userId,
IdNext = changeLogItemCurrentId, IdNext = changeLogItemCurrentId,
Obsolete = DateTimeOffset.UtcNow.AddDays(-5), Obsolete = DateTimeOffset.UtcNow.AddDays(-5),
Value = new ChangeLogValuesDto(){ Value = new ChangeLogValuesDto(){
Id = Guid.CreateVersion7(), Id = Guid.CreateVersion7(),
Value = new Dictionary<string, object>() { Value = new Dictionary<string, object>() {
["1"] = new { id = 1, caption = "Изменение 1" }, ["1"] = new { id = 1, caption = "Изменение 1" },
@ -219,7 +218,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
} }
}; };
var result = new List<HistoryChangeLogDto>() { var result = new List<HistoryChangeLogDto>() {
new() { new() {
Comment = "Петров И. Ю. попросил внести изменения", Comment = "Петров И. Ю. попросил внести изменения",
DateTime = changeLogItemCreation, DateTime = changeLogItemCreation,
DiscriminatorId = Guid.CreateVersion7(), DiscriminatorId = Guid.CreateVersion7(),

View File

@ -34,7 +34,7 @@ public class ChangeLogService
} }
/// <summary> /// <summary>
/// Создание или чтение данных коммита /// Чтение ключа коммита из кеша или (если коммита в кеше нет) создание коммита
/// </summary> /// </summary>
/// <param name="commitDto"></param> /// <param name="commitDto"></param>
/// <param name="token"></param> /// <param name="token"></param>

View File

@ -19,9 +19,6 @@ public class ChangeLog : IDiscriminatorItem, IChangeLog
[Comment("Дискриминатор таблицы")] [Comment("Дискриминатор таблицы")]
public Guid DiscriminatorId { get; set; } public Guid DiscriminatorId { get; set; }
[Comment("Автор изменения")]
public Guid IdAuthor { get; set; }
[Comment("Дата создания записи")] [Comment("Дата создания записи")]
public DateTimeOffset Creation { get; set; } public DateTimeOffset Creation { get; set; }

View File

@ -10,11 +10,6 @@ public interface IChangeLog
/// </summary> /// </summary>
public Guid Id { get; set; } public Guid Id { get; set; }
/// <summary>
/// Автор изменения
/// </summary>
public Guid IdAuthor { get; set; }
/// <summary> /// <summary>
/// Дата создания записи /// Дата создания записи
/// </summary> /// </summary>

View File

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

View File

@ -22,6 +22,7 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task AddRange() public async Task AddRange()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid(); var expectedCommitId = Uuid7.Guid();
var comment = "Добавление нескольких значений"; var comment = "Добавление нескольких значений";
@ -37,11 +38,13 @@ public class ChangeLogTest
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(2); .Returns(2);
//act
var addRangeResult = await service var addRangeResult = await service
.AddRange(discriminatorId, commit, dtos, CancellationToken.None); .AddRange(discriminatorId, commit, dtos, CancellationToken.None);
addRangeResult = await service addRangeResult = await service
.AddRange(discriminatorId, commit, dtos, CancellationToken.None); .AddRange(discriminatorId, commit, dtos, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(2).AddRange(discriminatorId, commit, dtos, CancellationToken.None); await changeLogRepository.Received(2).AddRange(discriminatorId, commit, dtos, CancellationToken.None);
} }
@ -49,6 +52,7 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task UpdateRange() public async Task UpdateRange()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var comment = "Изменение нескольких значений"; var comment = "Изменение нескольких значений";
@ -65,7 +69,7 @@ public class ChangeLogTest
Arg.Any<IEnumerable<ChangeLogValuesDto>>(), Arg.Any<IEnumerable<ChangeLogValuesDto>>(),
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(2); .Returns(2);
//act
var updateRangeResult = await service var updateRangeResult = await service
.UpdateRange(commit, dtos, CancellationToken.None); .UpdateRange(commit, dtos, CancellationToken.None);
@ -75,6 +79,7 @@ public class ChangeLogTest
updateRangeResult = await service updateRangeResult = await service
.UpdateRange(commit, dtos, CancellationToken.None); .UpdateRange(commit, dtos, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(3).UpdateRange(commit, dtos, CancellationToken.None); await changeLogRepository.Received(3).UpdateRange(commit, dtos, CancellationToken.None);
} }
@ -82,6 +87,7 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task MarkAsDeleted() public async Task MarkAsDeleted()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid(); var expectedCommitId = Uuid7.Guid();
var comment = "Удаление нескольких значений"; var comment = "Удаление нескольких значений";
@ -98,11 +104,13 @@ public class ChangeLogTest
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(2); .Returns(2);
//act
var markAsDeletedResult = await service var markAsDeletedResult = await service
.MarkAsDeleted(dtoIds, commit, CancellationToken.None); .MarkAsDeleted(dtoIds, commit, CancellationToken.None);
markAsDeletedResult = await service markAsDeletedResult = await service
.MarkAsDeleted(dtoIds, commit, CancellationToken.None); .MarkAsDeleted(dtoIds, commit, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(2).MarkAsDeleted(commit.Id, dtoIds, commit.Creation, CancellationToken.None); await changeLogRepository.Received(2).MarkAsDeleted(commit.Id, dtoIds, commit.Creation, CancellationToken.None);
} }
@ -110,6 +118,7 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task ClearAndAddRange() public async Task ClearAndAddRange()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var expectedCommitId = Uuid7.Guid(); var expectedCommitId = Uuid7.Guid();
var comment = "Удаление и добавление нескольких значений"; var comment = "Удаление и добавление нескольких значений";
@ -126,11 +135,13 @@ public class ChangeLogTest
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(2); .Returns(2);
//act
var clearAndAddResult = await service var clearAndAddResult = await service
.ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); .ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None);
clearAndAddResult = await service clearAndAddResult = await service
.ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); .ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None);
//assert
await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None);
await changeLogRepository.Received(2).ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); await changeLogRepository.Received(2).ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None);
} }
@ -138,6 +149,7 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task GetByDate() public async Task GetByDate()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var paginationRequest = new PaginationRequest() var paginationRequest = new PaginationRequest()
{ {
@ -162,9 +174,11 @@ public class ChangeLogTest
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(items); .Returns(items);
//act
var actualItems = await service var actualItems = await service
.GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None); .GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None);
//assert
await changeLogRepository.Received(1).GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None); await changeLogRepository.Received(1).GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None);
} }
@ -172,9 +186,10 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task GetChangeLogForInterval() public async Task GetChangeLogForInterval()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var dtos = GenerateChangeLogDto(5); var dtos = GenerateChangeLogDto(5);
;
var dateBegin = DateTimeOffset.UtcNow.AddDays(-5); var dateBegin = DateTimeOffset.UtcNow.AddDays(-5);
var dateEnd = DateTimeOffset.UtcNow; var dateEnd = DateTimeOffset.UtcNow;
@ -186,9 +201,11 @@ public class ChangeLogTest
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(dtos); .Returns(dtos);
//act
var actualItems = await service var actualItems = await service
.GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None); .GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None);
//assert
await changeLogRepository.Received(1).GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None); await changeLogRepository.Received(1).GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None);
} }
@ -196,6 +213,7 @@ public class ChangeLogTest
[Fact] [Fact]
public async Task GetDatesChange() public async Task GetDatesChange()
{ {
//arrange
var discriminatorId = Uuid7.Guid(); var discriminatorId = Uuid7.Guid();
var dateBegin = DateTimeOffset.UtcNow.AddDays(-5); var dateBegin = DateTimeOffset.UtcNow.AddDays(-5);
@ -212,9 +230,11 @@ public class ChangeLogTest
Arg.Any<CancellationToken>()) Arg.Any<CancellationToken>())
.Returns(dtos); .Returns(dtos);
//act
var actualItems = await service var actualItems = await service
.GetDatesChange(discriminatorId, CancellationToken.None); .GetDatesChange(discriminatorId, CancellationToken.None);
//assert
await changeLogRepository.Received(1).GetDatesChange(discriminatorId, CancellationToken.None); await changeLogRepository.Received(1).GetDatesChange(discriminatorId, CancellationToken.None);
} }