Правки по результатам ревью - 3
This commit is contained in:
parent
baba1a05c0
commit
14893e9bf6
@ -46,15 +46,6 @@ public class ChangeLogClient : BaseClient, IChangeLogClient
|
||||
return result!;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<int> Add(Guid idDiscriminator, ChangeLogValuesDto dto, string comment, CancellationToken token)
|
||||
{
|
||||
var result = await ExecutePostResponse(
|
||||
async () => await refitChangeLogClient.Add(idDiscriminator, dto, comment, token), token);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<int> AddRange(Guid idDiscriminator, IEnumerable<ChangeLogValuesDto> dtos, string comment, CancellationToken token)
|
||||
{
|
||||
@ -64,15 +55,6 @@ public class ChangeLogClient : BaseClient, IChangeLogClient
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<int> Update(ChangeLogValuesDto dto, string comment, CancellationToken token)
|
||||
{
|
||||
var result = await ExecutePostResponse(
|
||||
async () => await refitChangeLogClient.Update(dto, comment, token), token);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<int> UpdateRange(IEnumerable<ChangeLogValuesDto> dtos, string comment, CancellationToken token)
|
||||
{
|
||||
@ -82,15 +64,6 @@ public class ChangeLogClient : BaseClient, IChangeLogClient
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<int> Delete(Guid id, string comment, CancellationToken token)
|
||||
{
|
||||
var result = await ExecutePostResponse(
|
||||
async () => await refitChangeLogClient.Delete(id, comment, token), token);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<int> DeleteRange(IEnumerable<Guid> ids, string comment, CancellationToken token)
|
||||
{
|
||||
|
@ -9,16 +9,6 @@ namespace DD.Persistence.Client.Clients.Interfaces;
|
||||
/// </summary>
|
||||
public interface IChangeLogClient : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Добавить одну запись
|
||||
/// </summary>
|
||||
/// <param name="idDiscriminator"></param>
|
||||
/// <param name="dto"></param>
|
||||
/// <param name="comment"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
Task<int> Add(Guid idDiscriminator, ChangeLogValuesDto dto, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Добавить несколько записей
|
||||
/// </summary>
|
||||
@ -39,15 +29,6 @@ public interface IChangeLogClient : IDisposable
|
||||
/// <returns></returns>
|
||||
Task<int> ClearAndAddRange(Guid idDiscriminator, IEnumerable<ChangeLogValuesDto> dtos, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Удалить одну запись
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="comment"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
Task<int> Delete(Guid id, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Удалить несколько записей
|
||||
/// </summary>
|
||||
@ -85,15 +66,6 @@ public interface IChangeLogClient : IDisposable
|
||||
/// <returns></returns>
|
||||
Task<DatesRangeDto?> GetDatesRange(Guid idDiscriminator, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Обновить одну запись
|
||||
/// </summary>
|
||||
/// <param name="dto"></param>
|
||||
/// <param name="comment"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
Task<int> Update(ChangeLogValuesDto dto, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Обновить несколько записей
|
||||
/// </summary>
|
||||
|
@ -34,40 +34,22 @@ public interface IRefitChangeLogClient : IRefitClient, IDisposable
|
||||
[Get($"{BaseRoute}/history/{{idDiscriminator}}")]
|
||||
Task<IApiResponse<IEnumerable<ChangeLogDto>>> GetChangeLogForInterval(Guid idDiscriminator, DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Добавить одну запись
|
||||
/// </summary>
|
||||
[Post($"{BaseRoute}/{{idDiscriminator}}")]
|
||||
Task<IApiResponse<int>> Add(Guid idDiscriminator, ChangeLogValuesDto dto, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Добавить несколько записей
|
||||
/// </summary>
|
||||
[Post($"{BaseRoute}/range/{{idDiscriminator}}")]
|
||||
[Post($"{BaseRoute}/{{idDiscriminator}}")]
|
||||
Task<IApiResponse<int>> AddRange(Guid idDiscriminator, IEnumerable<ChangeLogValuesDto> dtos, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Обновить одну запись
|
||||
/// </summary>
|
||||
[Put($"{BaseRoute}")]
|
||||
Task<IApiResponse<int>> Update(ChangeLogValuesDto dto, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Обновить несколько записей
|
||||
/// </summary>
|
||||
[Put($"{BaseRoute}/range")]
|
||||
[Put($"{BaseRoute}")]
|
||||
Task<IApiResponse<int>> UpdateRange(IEnumerable<ChangeLogValuesDto> dtos, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Удалить одну запись
|
||||
/// </summary>
|
||||
[Delete($"{BaseRoute}")]
|
||||
Task<IApiResponse<int>> Delete(Guid id, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
/// Удалить несколько записей
|
||||
/// </summary>
|
||||
[Delete($"{BaseRoute}/range")]
|
||||
[Delete($"{BaseRoute}")]
|
||||
Task<IApiResponse<int>> DeleteRange([Body] IEnumerable<Guid> ids, string comment, CancellationToken token);
|
||||
|
||||
/// <summary>
|
||||
|
@ -13,7 +13,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
namespace DD.Persistence.Database.Postgres.Migrations
|
||||
{
|
||||
[DbContext(typeof(PersistencePostgresContext))]
|
||||
[Migration("20250218060716_Init")]
|
||||
[Migration("20250218121851_Init")]
|
||||
partial class Init
|
||||
{
|
||||
/// <inheritdoc />
|
||||
@ -45,14 +45,18 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Автор изменения");
|
||||
|
||||
b.Property<Guid>("IdCommit")
|
||||
b.Property<Guid>("IdCreatedCommit")
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Id коммита");
|
||||
.HasComment("Id коммита на создание записи");
|
||||
|
||||
b.Property<Guid?>("IdNext")
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Id заменяющей записи");
|
||||
|
||||
b.Property<Guid?>("IdObsoletedCommit")
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Id коммита на устаревание записи");
|
||||
|
||||
b.Property<DateTimeOffset?>("Obsolete")
|
||||
.HasColumnType("timestamp with time zone")
|
||||
.HasComment("Дата устаревания (например при удалении)");
|
||||
@ -64,7 +68,9 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("IdCommit");
|
||||
b.HasIndex("IdCreatedCommit");
|
||||
|
||||
b.HasIndex("IdObsoletedCommit");
|
||||
|
||||
b.ToTable("change_log");
|
||||
});
|
||||
@ -243,13 +249,19 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
|
||||
modelBuilder.Entity("DD.Persistence.Database.Entity.ChangeLog", b =>
|
||||
{
|
||||
b.HasOne("DD.Persistence.Database.Entity.ChangeLogCommit", "Commit")
|
||||
.WithMany("ChangeLogItems")
|
||||
.HasForeignKey("IdCommit")
|
||||
b.HasOne("DD.Persistence.Database.Entity.ChangeLogCommit", "CreatedCommit")
|
||||
.WithMany("ChangeLogCreatedItems")
|
||||
.HasForeignKey("IdCreatedCommit")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Commit");
|
||||
b.HasOne("DD.Persistence.Database.Entity.ChangeLogCommit", "ObsoletedCommit")
|
||||
.WithMany("ChangeLogObsoletedItems")
|
||||
.HasForeignKey("IdObsoletedCommit");
|
||||
|
||||
b.Navigation("CreatedCommit");
|
||||
|
||||
b.Navigation("ObsoletedCommit");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
||||
@ -265,7 +277,9 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
|
||||
modelBuilder.Entity("DD.Persistence.Database.Entity.ChangeLogCommit", b =>
|
||||
{
|
||||
b.Navigation("ChangeLogItems");
|
||||
b.Navigation("ChangeLogCreatedItems");
|
||||
|
||||
b.Navigation("ChangeLogObsoletedItems");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
@ -105,17 +105,23 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
Obsolete = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true, comment: "Дата устаревания (например при удалении)"),
|
||||
IdNext = table.Column<Guid>(type: "uuid", nullable: true, comment: "Id заменяющей записи"),
|
||||
Value = table.Column<string>(type: "jsonb", nullable: false, comment: "Значение"),
|
||||
IdCommit = table.Column<Guid>(type: "uuid", nullable: false, comment: "Id коммита")
|
||||
IdCreatedCommit = table.Column<Guid>(type: "uuid", nullable: false, comment: "Id коммита на создание записи"),
|
||||
IdObsoletedCommit = table.Column<Guid>(type: "uuid", nullable: true, comment: "Id коммита на устаревание записи")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_change_log", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_change_log_change_log_commit_IdCommit",
|
||||
column: x => x.IdCommit,
|
||||
name: "FK_change_log_change_log_commit_IdCreatedCommit",
|
||||
column: x => x.IdCreatedCommit,
|
||||
principalTable: "change_log_commit",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_change_log_change_log_commit_IdObsoletedCommit",
|
||||
column: x => x.IdObsoletedCommit,
|
||||
principalTable: "change_log_commit",
|
||||
principalColumn: "Id");
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
@ -141,9 +147,14 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_change_log_IdCommit",
|
||||
name: "IX_change_log_IdCreatedCommit",
|
||||
table: "change_log",
|
||||
column: "IdCommit");
|
||||
column: "IdCreatedCommit");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_change_log_IdObsoletedCommit",
|
||||
table: "change_log",
|
||||
column: "IdObsoletedCommit");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_tech_message_SystemId",
|
@ -42,14 +42,18 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Автор изменения");
|
||||
|
||||
b.Property<Guid>("IdCommit")
|
||||
b.Property<Guid>("IdCreatedCommit")
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Id коммита");
|
||||
.HasComment("Id коммита на создание записи");
|
||||
|
||||
b.Property<Guid?>("IdNext")
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Id заменяющей записи");
|
||||
|
||||
b.Property<Guid?>("IdObsoletedCommit")
|
||||
.HasColumnType("uuid")
|
||||
.HasComment("Id коммита на устаревание записи");
|
||||
|
||||
b.Property<DateTimeOffset?>("Obsolete")
|
||||
.HasColumnType("timestamp with time zone")
|
||||
.HasComment("Дата устаревания (например при удалении)");
|
||||
@ -61,7 +65,9 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("IdCommit");
|
||||
b.HasIndex("IdCreatedCommit");
|
||||
|
||||
b.HasIndex("IdObsoletedCommit");
|
||||
|
||||
b.ToTable("change_log");
|
||||
});
|
||||
@ -240,13 +246,19 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
|
||||
modelBuilder.Entity("DD.Persistence.Database.Entity.ChangeLog", b =>
|
||||
{
|
||||
b.HasOne("DD.Persistence.Database.Entity.ChangeLogCommit", "Commit")
|
||||
.WithMany("ChangeLogItems")
|
||||
.HasForeignKey("IdCommit")
|
||||
b.HasOne("DD.Persistence.Database.Entity.ChangeLogCommit", "CreatedCommit")
|
||||
.WithMany("ChangeLogCreatedItems")
|
||||
.HasForeignKey("IdCreatedCommit")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Commit");
|
||||
b.HasOne("DD.Persistence.Database.Entity.ChangeLogCommit", "ObsoletedCommit")
|
||||
.WithMany("ChangeLogObsoletedItems")
|
||||
.HasForeignKey("IdObsoletedCommit");
|
||||
|
||||
b.Navigation("CreatedCommit");
|
||||
|
||||
b.Navigation("ObsoletedCommit");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
||||
@ -262,7 +274,9 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
||||
|
||||
modelBuilder.Entity("DD.Persistence.Database.Entity.ChangeLogCommit", b =>
|
||||
{
|
||||
b.Navigation("ChangeLogItems");
|
||||
b.Navigation("ChangeLogCreatedItems");
|
||||
|
||||
b.Navigation("ChangeLogObsoletedItems");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
|
@ -34,9 +34,15 @@ public class ChangeLog : IDiscriminatorItem, IChangeLog
|
||||
[Column(TypeName = "jsonb"), Comment("Значение")]
|
||||
public required IDictionary<string, object> Value { get; set; }
|
||||
|
||||
[Required, Comment("Id коммита")]
|
||||
public Guid IdCommit { get; set; }
|
||||
[Required, Comment("Id коммита на создание записи")]
|
||||
public Guid IdCreatedCommit { get; set; }
|
||||
|
||||
[Required, ForeignKey(nameof(IdCommit)), Comment("Коммит пользователя")]
|
||||
public virtual ChangeLogCommit Commit { get; set; } = null!;
|
||||
[Comment("Id коммита на устаревание записи")]
|
||||
public Guid? IdObsoletedCommit { get; set; }
|
||||
|
||||
[Required, ForeignKey(nameof(IdCreatedCommit)), Comment("Коммит пользователя на создание записи")]
|
||||
public virtual ChangeLogCommit CreatedCommit { get; set; } = null!;
|
||||
|
||||
[ForeignKey(nameof(IdObsoletedCommit)), Comment("Коммит пользователя на устаревание записи")]
|
||||
public virtual ChangeLogCommit? ObsoletedCommit { get; set; }
|
||||
}
|
||||
|
@ -27,6 +27,9 @@ public class ChangeLogCommit
|
||||
[Comment("Комментарий к коммиту")]
|
||||
public required string Comment { get; set; }
|
||||
|
||||
[Required, InverseProperty(nameof(ChangeLog.Commit)), Comment("Журнал изменений")]
|
||||
public virtual ICollection<ChangeLog> ChangeLogItems { get; set; } = null!;
|
||||
[Required, InverseProperty(nameof(ChangeLog.CreatedCommit)), Comment("Записи, добавленные в журнал изменений")]
|
||||
public virtual ICollection<ChangeLog> ChangeLogCreatedItems { get; set; } = null!;
|
||||
|
||||
[InverseProperty(nameof(ChangeLog.ObsoletedCommit)), Comment("Устаревшие записи в журнале изменений")]
|
||||
public virtual ICollection<ChangeLog>? ChangeLogObsoletedItems { get; set; } = null!;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public class ChangeLogRepository : IChangeLogRepository
|
||||
IdAuthor = commitDto.IdAuthor,
|
||||
DiscriminatorId = idDiscriminator,
|
||||
Value = values.Value,
|
||||
IdCommit = commitDto.Id,
|
||||
IdCreatedCommit = commitDto.Id,
|
||||
};
|
||||
|
||||
entities.Add(entity);
|
||||
@ -59,7 +59,7 @@ public class ChangeLogRepository : IChangeLogRepository
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
entity.Obsolete = updateTime;
|
||||
entity.IdCommit = idCommit;
|
||||
entity.IdObsoletedCommit = idCommit;
|
||||
}
|
||||
|
||||
return await db.SaveChangesAsync(token);
|
||||
@ -126,12 +126,13 @@ public class ChangeLogRepository : IChangeLogRepository
|
||||
IdAuthor = commitDto.IdAuthor,
|
||||
DiscriminatorId = updatedEntity.DiscriminatorId,
|
||||
Value = dto.Value,
|
||||
IdCommit = commitDto.Id,
|
||||
IdCreatedCommit = commitDto.Id,
|
||||
};
|
||||
dbSet.Add(newEntity);
|
||||
|
||||
updatedEntity.IdNext = newEntity.Id;
|
||||
updatedEntity.Obsolete = commitDto.Creation;
|
||||
updatedEntity.IdObsoletedCommit = commitDto.Id;
|
||||
}
|
||||
|
||||
var result = await db.SaveChangesAsync(token);
|
||||
|
@ -51,23 +51,6 @@ public class ChangeLogControllerTest : BaseIntegrationTest
|
||||
Assert.Equal(insertedCount * 2, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Add_returns_success()
|
||||
{
|
||||
// arrange
|
||||
var count = 1;
|
||||
var idDiscriminator = Guid.NewGuid();
|
||||
var dtos = Generate(count);
|
||||
var dto = dtos.FirstOrDefault()!;
|
||||
var comment = "Создаю 1 элемент";
|
||||
|
||||
// act
|
||||
var result = await client.Add(idDiscriminator, dto, comment, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
Assert.Equal(count, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task AddRange_returns_success()
|
||||
{
|
||||
@ -87,14 +70,14 @@ public class ChangeLogControllerTest : BaseIntegrationTest
|
||||
[Fact]
|
||||
public async Task Update_returns_success()
|
||||
{
|
||||
// arrange
|
||||
//arrange
|
||||
dbContext.CleanupDbSet<ChangeLog>();
|
||||
|
||||
var idDiscriminator = Guid.NewGuid();
|
||||
var dtos = Generate(1);
|
||||
var dto = dtos.FirstOrDefault()!;
|
||||
var comment = "Создаю 1 элемент";
|
||||
var result = await client.Add(idDiscriminator, dto, comment, CancellationToken.None);
|
||||
var result = await client.AddRange(idDiscriminator, [dto], comment, CancellationToken.None);
|
||||
|
||||
var entity = dbContext.ChangeLog
|
||||
.Where(x => x.DiscriminatorId == idDiscriminator)
|
||||
@ -103,7 +86,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
|
||||
|
||||
// act
|
||||
comment = "Обновляю 1 элемент";
|
||||
result = await client.Update(dto, comment, CancellationToken.None);
|
||||
result = await client.UpdateRange([dto], comment, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
Assert.Equal(2, result);
|
||||
@ -151,22 +134,6 @@ public class ChangeLogControllerTest : BaseIntegrationTest
|
||||
Assert.Equal(count * 2, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Delete_returns_success()
|
||||
{
|
||||
// arrange
|
||||
var insertedCount = 1;
|
||||
var newEntitiesData = await CreateAndReturnNewDtos(insertedCount, (-15, -1));
|
||||
var idDiscriminator = newEntitiesData.Item1;
|
||||
var dto = newEntitiesData.Item2.FirstOrDefault();
|
||||
|
||||
// act
|
||||
var result = await client.Delete(dto!.Id, "Удаление одной записи", CancellationToken.None);
|
||||
|
||||
// assert
|
||||
Assert.Equal(1, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteRange_returns_success()
|
||||
{
|
||||
@ -335,7 +302,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
|
||||
var entity = d.Adapt<ChangeLog>();
|
||||
entity.DiscriminatorId = idDiscriminator;
|
||||
entity.Creation = DateTimeOffset.UtcNow.AddDays(generatorRandomDigits.Next(minDayCount, maxDayCount));
|
||||
entity.IdCommit = commit.Id;
|
||||
entity.IdCreatedCommit = commit.Id;
|
||||
|
||||
return entity;
|
||||
}).ToArray();
|
||||
|
Loading…
Reference in New Issue
Block a user