Правка по результатам ревью
This commit is contained in:
parent
523c15093f
commit
4b7f55c3c8
@ -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(),
|
||||||
|
@ -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>
|
||||||
|
@ -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; }
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user