feat(dal): BaseService - доделал ведение истории

This commit is contained in:
Mikhail Trubnikov
2024-10-08 09:40:08 +10:00
parent a0e71c9948
commit 54fed9b597
2 changed files with 15 additions and 18 deletions

View File

@@ -40,12 +40,6 @@ namespace PARR.DAL.Services.Abstracts
public async Task<bool> CommitAsync(HistoryInitiator? initiator = null)
{
//todo: remove initiator
//проверить что инициатор сохраняется в родительской таблице
// что с родительской переписывается в историю
// входной initiator не переписывает историю
initiator = new HistoryInitiator { InitiatorComment = "Comment", InitiatorIp = "10.10.10.10", InitiatorParrComponentId = Constants.ParrComponentsEnum.Api };
#region Изменения
var modifiedEntrities = EntitiContext.ChangeTracker.Entries()
.Where(t => t.State == EntityState.Modified/* || t.State == EntityState.Deleted*/);
@@ -60,8 +54,7 @@ namespace PARR.DAL.Services.Abstracts
}
#endregion
if (initiator != null)
SetInitiator(initiator);
SetInitiator(initiator);
try
{
@@ -80,7 +73,7 @@ namespace PARR.DAL.Services.Abstracts
/// Установить инициатора
/// </summary>
/// <param name="initiator"></param>
private void SetInitiator(IHistoryInitiator initiator)
private void SetInitiator(IHistoryInitiator? initiator)
{
// Задваем иницатора только для новых и измененных записей
var entrities = EntitiContext.ChangeTracker.Entries()
@@ -92,9 +85,9 @@ namespace PARR.DAL.Services.Abstracts
// для всех объектов которые наследуются от IHistoryInitiator и не являются наследниками IHistoryTable
if (obj.Entity is IHistoryInitiator && obj.Entity is IHistoryTable == false)
{
(obj.Entity as IHistoryInitiator)!.InitiatorIp = initiator.InitiatorIp;
(obj.Entity as IHistoryInitiator)!.InitiatorParrComponentId = initiator.InitiatorParrComponentId;
(obj.Entity as IHistoryInitiator)!.InitiatorComment = initiator.InitiatorComment;
(obj.Entity as IHistoryInitiator)!.InitiatorIp = initiator?.InitiatorIp ?? null;
(obj.Entity as IHistoryInitiator)!.InitiatorParrComponentId = initiator?.InitiatorParrComponentId ?? null;
(obj.Entity as IHistoryInitiator)!.InitiatorComment = initiator?.InitiatorComment ?? null;
}
}
}
@@ -198,7 +191,7 @@ namespace PARR.DAL.Services.Abstracts
/// <param name="instanceObj"></param>
/// <param name="propName"></param>
/// <param name="value"></param>
private void FillHistoryProp<T>(ref object instanceObj, string propName, T value)
private void FillHistoryProp<TValue>(ref object instanceObj, string propName, TValue value)
{
var histProp = instanceObj.GetType().GetProperty(propName);
if (histProp == null)
@@ -208,9 +201,9 @@ namespace PARR.DAL.Services.Abstracts
}
// сравним типы
if (histProp.PropertyType != typeof(T))
if (histProp.PropertyType != typeof(TValue))
{
logger.LogError($"При изменении объекта для БД, не совпадают типы у свойства {propName}, {histProp.PropertyType.Name}!={typeof(T).Name}");
logger.LogError($"При изменении объекта для БД, не совпадают типы у свойства {propName}, {histProp.PropertyType.Name}!={typeof(TValue).Name}");
return;
}