Поле с комментариями в методах контроллера, отвечающие за удаление

This commit is contained in:
Olga Nemt 2025-02-12 11:24:31 +05:00
parent b3c6acbd18
commit ebd2cff40d
5 changed files with 34 additions and 28 deletions

View File

@ -54,20 +54,20 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
[HttpDelete] [HttpDelete]
[ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Delete(Guid id, CancellationToken token) public async Task<IActionResult> Delete(Guid id, string comment, CancellationToken token)
{ {
var userId = User.GetUserId<Guid>(); var userId = User.GetUserId<Guid>();
var result = await repository.MarkAsDeleted(userId, [id], token); var result = await repository.MarkAsDeleted(userId, [id], comment, token);
return Ok(result); return Ok(result);
} }
[HttpDelete("range")] [HttpDelete("range")]
[ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)]
public async Task<IActionResult> DeleteRange(IEnumerable<Guid> ids, CancellationToken token) public async Task<IActionResult> DeleteRange(IEnumerable<Guid> ids, string comment, CancellationToken token)
{ {
var userId = User.GetUserId<Guid>(); var userId = User.GetUserId<Guid>();
var result = await repository.MarkAsDeleted(userId, ids, token); var result = await repository.MarkAsDeleted(userId, ids, comment, token);
return Ok(result); return Ok(result);
} }

View File

@ -6,7 +6,7 @@
} }
}, },
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=persistence;Username=postgres;Password=postgres;Persist Security Info=True" "DefaultConnection": "Host=localhost:5462;Database=persistence;Username=postgres;Password=postgres;Persist Security Info=True"
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"NeedUseKeyCloak": false, "NeedUseKeyCloak": false,

View File

@ -36,7 +36,7 @@ public class ChangeLogRepository : IChangeLogRepository
return result; return result;
} }
public async Task<int> MarkAsDeleted(Guid idEditor, IEnumerable<Guid> ids, CancellationToken token) public async Task<int> MarkAsDeleted(Guid idEditor, IEnumerable<Guid> ids, string comment, CancellationToken token)
{ {
var query = db.Set<ChangeLog>() var query = db.Set<ChangeLog>()
.Where(s => ids.Contains(s.Id)) .Where(s => ids.Contains(s.Id))
@ -49,12 +49,12 @@ public class ChangeLogRepository : IChangeLogRepository
var entities = await query.ToArrayAsync(token); var entities = await query.ToArrayAsync(token);
var result = await MarkAsObsolete(idEditor, entities, token); var result = await MarkAsObsolete(idEditor, entities, comment, token);
return result; return result;
} }
public async Task<int> MarkAsDeleted(Guid idEditor, Guid idDiscriminator, CancellationToken token) public async Task<int> MarkAsDeleted(Guid idEditor, Guid idDiscriminator, string comment, CancellationToken token)
{ {
var query = db.Set<ChangeLog>() var query = db.Set<ChangeLog>()
.Where(s => s.IdDiscriminator == idDiscriminator) .Where(s => s.IdDiscriminator == idDiscriminator)
@ -62,19 +62,26 @@ public class ChangeLogRepository : IChangeLogRepository
var entities = await query.ToArrayAsync(token); var entities = await query.ToArrayAsync(token);
var result = await MarkAsObsolete(idEditor, entities, token); var result = await MarkAsObsolete(idEditor, entities, comment, token);
return result; return result;
} }
private async Task<int> MarkAsObsolete(Guid idEditor, IEnumerable<ChangeLog> entities, CancellationToken token) private async Task<int> MarkAsObsolete(Guid idEditor, IEnumerable<ChangeLog> entities, string comment, CancellationToken token)
{ {
var updateTime = DateTimeOffset.UtcNow; var updateTime = DateTimeOffset.UtcNow;
var commit = new ChangeLogCommit() {
Comment = comment,
Creation = updateTime,
Id = Uuid7.Guid(),
IdCommitAuthor = idEditor
};
db.Set<ChangeLogCommit>().Add(commit);
foreach (var entity in entities) foreach (var entity in entities)
{ {
entity.Obsolete = updateTime; entity.Obsolete = updateTime;
//entity.IdEditor = idEditor; entity.IdDiscriminator = commit.Id;
} }
return await db.SaveChangesAsync(token); return await db.SaveChangesAsync(token);
@ -84,14 +91,16 @@ public class ChangeLogRepository : IChangeLogRepository
{ {
var result = 0; var result = 0;
var changeLogIds = commitDto.ChangeLogItems.Select(c => c.Id);
var comment = commitDto.Comment;
using var transaction = await db.Database.BeginTransactionAsync(token); using var transaction = await db.Database.BeginTransactionAsync(token);
result += await MarkAsDeleted(commitDto.IdAuthor, idDiscriminator, token); result += await MarkAsDeleted(commitDto.IdAuthor, changeLogIds, comment, token);
result += await AddRange(idDiscriminator, commitDto, token); result += await AddRange(idDiscriminator, commitDto, token);
await transaction.CommitAsync(token); await transaction.CommitAsync(token);
return result; return result;
} }
@ -104,15 +113,10 @@ public class ChangeLogRepository : IChangeLogRepository
.Where(s => updatedIds.Contains(s.Id)) .Where(s => updatedIds.Contains(s.Id))
.ToDictionary(s => s.Id); .ToDictionary(s => s.Id);
var result = 0; using var transaction = await db.Database.BeginTransactionAsync(token);
var commit = CreateCommit(commitDto); var commit = CreateCommit(commitDto);
db.Set<ChangeLogCommit>().Add(commit); db.Set<ChangeLogCommit>().Add(commit);
db.SaveChanges();
//using var transaction = await db.Database.BeginTransactionAsync(token);
foreach (var dto in commitDto.ChangeLogItems) foreach (var dto in commitDto.ChangeLogItems)
{ {
@ -122,19 +126,17 @@ public class ChangeLogRepository : IChangeLogRepository
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));
} }
var newEntity = CreateChangeLogFromDto(commitDto.IdAuthor, updatedEntity.IdDiscriminator, commit.Id, dto); var newEntity = CreateChangeLogFromDto(updatedEntity.IdDiscriminator, commit.Id, commitDto.IdAuthor, dto);
dbSet.Add(newEntity); dbSet.Add(newEntity);
updatedEntity.IdNext = newEntity.Id; updatedEntity.IdNext = newEntity.Id;
updatedEntity.Obsolete = DateTimeOffset.UtcNow; updatedEntity.Obsolete = DateTimeOffset.UtcNow;
} }
result = await db.SaveChangesAsync(token); var result = await db.SaveChangesAsync(token);
//await transaction.CommitAsync(token); await transaction.CommitAsync(token);
return result; return result;
} }
public async Task<PaginationContainer<ChangeLogValuesDto>> GetByDate( public async Task<PaginationContainer<ChangeLogValuesDto>> GetByDate(

View File

@ -90,17 +90,19 @@ public interface IChangeLogApi : ISyncWithDiscriminatorApi<ChangeLogValuesDto>
/// Удалить одну запись /// Удалить одну запись
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="comment">комментарий к удалению</param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IActionResult> Delete(Guid id, CancellationToken token); Task<IActionResult> Delete(Guid id, string comment, CancellationToken token);
/// <summary> /// <summary>
/// Удалить несколько записей /// Удалить несколько записей
/// </summary> /// </summary>
/// <param name="ids"></param> /// <param name="ids"></param>
/// <param name="comment">комментарий к удалению</param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IActionResult> DeleteRange(IEnumerable<Guid> ids, CancellationToken token); Task<IActionResult> DeleteRange(IEnumerable<Guid> ids, string comment, CancellationToken token);
/// <summary> /// <summary>
/// Получение списка дат, в которые происходили изменения (день, месяц, год, без времени) /// Получение списка дат, в которые происходили изменения (день, месяц, год, без времени)

View File

@ -24,18 +24,20 @@ public interface IChangeLogRepository : ISyncWithDiscriminatorRepository<ChangeL
/// </summary> /// </summary>
/// <param name="idEditor"></param> /// <param name="idEditor"></param>
/// <param name="ids">ключи записей</param> /// <param name="ids">ключи записей</param>
/// <param name="comment">комментарий к удалению</param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<int> MarkAsDeleted(Guid idEditor, IEnumerable<Guid> ids, CancellationToken token); Task<int> MarkAsDeleted(Guid idEditor, IEnumerable<Guid> ids, string comment, CancellationToken token);
/// <summary> /// <summary>
/// Пометить записи как удаленные /// Пометить записи как удаленные
/// </summary> /// </summary>
/// <param name="idEditor"></param> /// <param name="idEditor"></param>
/// <param name="idDiscriminator">дискриминатор таблицы</param> /// <param name="idDiscriminator">дискриминатор таблицы</param>
/// <param name="comment">комментарий к удалению</param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<int> MarkAsDeleted(Guid idEditor, Guid idDiscriminator, CancellationToken token); Task<int> MarkAsDeleted(Guid idEditor, Guid idDiscriminator, string comment, CancellationToken token);
/// <summary> /// <summary>
/// Очистить и добавить новые /// Очистить и добавить новые