feat(dal,core): Рефакторинг методов и логики выдачи заданий роботом при переименовании шаблонов
This commit is contained in:
@@ -15,13 +15,13 @@ namespace PARR.DAL.Repositories.Base
|
||||
{
|
||||
internal abstract class BaseRepository<T> : IBaseRepository<T> where T : class, IBaseEntity
|
||||
{
|
||||
protected readonly ILogger logger;
|
||||
protected readonly ILogger _logger;
|
||||
protected readonly DbSet<T> EntitySet;
|
||||
protected readonly DataContext EntityContext;
|
||||
|
||||
protected BaseRepository(ILogger logger, DataContext dataContext)
|
||||
{
|
||||
this.logger = logger;
|
||||
this._logger = logger;
|
||||
this.EntityContext = dataContext;
|
||||
this.EntitySet = dataContext.Set<T>();
|
||||
}
|
||||
@@ -29,7 +29,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
|
||||
public virtual async Task<bool> AddRangeAsync(List<T> objs)
|
||||
{
|
||||
logger.LogDebug("Начинаю добавление диапазона объектов типа {EntityType}, количество: {Count}",
|
||||
_logger.LogDebug("Начинаю добавление диапазона объектов типа {EntityType}, количество: {Count}",
|
||||
typeof(T).Name, objs.Count);
|
||||
|
||||
objs.ForEach(item => item.DateCreated = DateTimeOffset.UtcNow);
|
||||
@@ -37,26 +37,26 @@ namespace PARR.DAL.Repositories.Base
|
||||
try
|
||||
{
|
||||
await EntitySet.AddRangeAsync(objs);
|
||||
logger.LogDebug("Успешно добавлено {Count} объектов типа {EntityType}",
|
||||
_logger.LogDebug("Успешно добавлено {Count} объектов типа {EntityType}",
|
||||
objs.Count, typeof(T).Name);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при добавлении диапазона объектов типа {EntityType}", typeof(T).Name);
|
||||
_logger.LogError(ex, "Ошибка при добавлении диапазона объектов типа {EntityType}", typeof(T).Name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> CommitAsync(IHistoryInitiator? initiator = null)
|
||||
{
|
||||
logger.LogDebug("Начинаю сохранение изменений в БД для объектов типа {EntityType}", typeof(T).Name);
|
||||
_logger.LogDebug("Начинаю сохранение изменений в БД для объектов типа {EntityType}", typeof(T).Name);
|
||||
|
||||
#region Изменения
|
||||
var modifiedEntrities = EntityContext.ChangeTracker.Entries()
|
||||
.Where(t => t.State == EntityState.Modified/* || t.State == EntityState.Deleted*/);
|
||||
|
||||
logger.LogDebug("Найдено {Count} измененных сущностей для обработки истории", modifiedEntrities.Count());
|
||||
_logger.LogDebug("Найдено {Count} измененных сущностей для обработки истории", modifiedEntrities.Count());
|
||||
|
||||
foreach (var obj in modifiedEntrities)
|
||||
{
|
||||
@@ -73,13 +73,13 @@ namespace PARR.DAL.Repositories.Base
|
||||
try
|
||||
{
|
||||
var changedCount = await EntityContext.SaveChangesAsync();
|
||||
logger.LogDebug("Успешно сохранено {ChangedCount} изменений в БД для объектов типа {EntityType}",
|
||||
_logger.LogDebug("Успешно сохранено {ChangedCount} изменений в БД для объектов типа {EntityType}",
|
||||
changedCount, typeof(T).Name);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при сохранении изменений в БД для объектов типа {EntityType}", typeof(T).Name);
|
||||
_logger.LogError(ex, "Ошибка при сохранении изменений в БД для объектов типа {EntityType}", typeof(T).Name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -94,14 +94,14 @@ namespace PARR.DAL.Repositories.Base
|
||||
if (initiator == null)
|
||||
return;
|
||||
|
||||
logger.LogDebug("Устанавливаю инициатора для изменений");
|
||||
_logger.LogDebug("Устанавливаю инициатора для изменений");
|
||||
|
||||
// Задаем инициатора только для новых и измененных записей
|
||||
var entrities = EntityContext.ChangeTracker.Entries()
|
||||
.Where(t => t.State == EntityState.Modified || t.State == EntityState.Added);
|
||||
|
||||
var entityCount = entrities.Count();
|
||||
logger.LogDebug("Найдено {Count} сущностей для установки инициатора", entityCount);
|
||||
_logger.LogDebug("Найдено {Count} сущностей для установки инициатора", entityCount);
|
||||
|
||||
// смотрим есть ли у объекта интерфейс IHistoryInitiator, если есть, задаём значения
|
||||
foreach (var obj in entrities)
|
||||
@@ -113,7 +113,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
(obj.Entity as IHistoryInitiator)!.InitiatorParrComponentId = initiator?.InitiatorParrComponentId ?? null;
|
||||
(obj.Entity as IHistoryInitiator)!.InitiatorComment = initiator?.InitiatorComment ?? null;
|
||||
|
||||
logger.LogDebug("Установлен инициатор для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
_logger.LogDebug("Установлен инициатор для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -140,12 +140,12 @@ namespace PARR.DAL.Repositories.Base
|
||||
|
||||
if (!isManual)
|
||||
{
|
||||
logger.LogDebug("Обновляю DateModified для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
_logger.LogDebug("Обновляю DateModified для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
entity.DateModified = DateTimeOffset.UtcNow;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogDebug("Пропуск обновления DateModified (ManualControl) для {EntityType}", entityType.Name);
|
||||
_logger.LogDebug("Пропуск обновления DateModified (ManualControl) для {EntityType}", entityType.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,7 +156,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
/// <param name="obj"></param>
|
||||
private void TableHistoryResolver(EntityEntry obj)
|
||||
{
|
||||
logger.LogDebug("Проверяю необходимость создания истории для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
_logger.LogDebug("Проверяю необходимость создания истории для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
|
||||
var myHistoryInterface = obj.Entity.GetType().GetInterfaces()
|
||||
.Where(t => t.IsGenericType)
|
||||
@@ -166,7 +166,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
// у этого объекта нет интерфейса IMyHistory<>. Не ведем историю
|
||||
if (myHistoryInterface == null)
|
||||
{
|
||||
logger.LogDebug("Сущность типа {EntityType} не требует ведения истории", obj.Entity.GetType().Name);
|
||||
_logger.LogDebug("Сущность типа {EntityType} не требует ведения истории", obj.Entity.GetType().Name);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -176,13 +176,13 @@ namespace PARR.DAL.Repositories.Base
|
||||
var historyType = myHistoryInterface.GetGenericArguments().First();
|
||||
var historyProps = historyType.GetProperties(/*BindingFlags.DeclaredOnly | */ /*BindingFlags.Public*/).ToList();
|
||||
|
||||
logger.LogDebug("Создаю историю для сущности типа {EntityType}, тип истории: {HistoryType}",
|
||||
_logger.LogDebug("Создаю историю для сущности типа {EntityType}, тип истории: {HistoryType}",
|
||||
obj.Entity.GetType().Name, historyType.Name);
|
||||
|
||||
var historyInstance = Activator.CreateInstance(historyType);
|
||||
if (historyInstance == null)
|
||||
{
|
||||
logger.LogError("Не смог создать инстанс для ведения истории {HistoryType}", historyType.Name);
|
||||
_logger.LogError("Не смог создать инстанс для ведения истории {HistoryType}", historyType.Name);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -198,11 +198,11 @@ namespace PARR.DAL.Repositories.Base
|
||||
try
|
||||
{
|
||||
EntityContext.Add(historyInstance);
|
||||
logger.LogDebug("История добавлена для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
_logger.LogDebug("История добавлена для сущности типа {EntityType}", obj.Entity.GetType().Name);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при добавлении объекта в историю {HistoryType}", historyType.Name);
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта в историю {HistoryType}", historyType.Name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,7 +215,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
/// <param name="propsList"></param>
|
||||
private void FillHistoryProps(EntityEntry originalObj, ref object historyInstance, List<PropertyInfo> propsList)
|
||||
{
|
||||
logger.LogDebug("Заполняю историю для сущности типа {EntityType}", originalObj.Entity.GetType().Name);
|
||||
_logger.LogDebug("Заполняю историю для сущности типа {EntityType}", originalObj.Entity.GetType().Name);
|
||||
|
||||
foreach (var prop in propsList)
|
||||
{
|
||||
@@ -240,7 +240,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
histProp.SetValue(historyInstance, origValues);
|
||||
}
|
||||
|
||||
logger.LogDebug("Завершено заполнение истории для сущности типа {EntityType}", originalObj.Entity.GetType().Name);
|
||||
_logger.LogDebug("Завершено заполнение истории для сущности типа {EntityType}", originalObj.Entity.GetType().Name);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,14 +256,14 @@ namespace PARR.DAL.Repositories.Base
|
||||
var histProp = instanceObj.GetType().GetProperty(propName);
|
||||
if (histProp == null)
|
||||
{
|
||||
logger.LogError("При изменении объекта для БД, не найдено свойство {PropertyName}", propName);
|
||||
_logger.LogError("При изменении объекта для БД, не найдено свойство {PropertyName}", propName);
|
||||
return;
|
||||
}
|
||||
|
||||
// сравним типы
|
||||
if (histProp.PropertyType != typeof(TValue))
|
||||
{
|
||||
logger.LogError("При изменении объекта для БД, не совпадают типы у свойства {PropertyName}, {PropertyType}!={ValueType}",
|
||||
_logger.LogError("При изменении объекта для БД, не совпадают типы у свойства {PropertyName}, {PropertyType}!={ValueType}",
|
||||
propName, histProp.PropertyType.Name, typeof(TValue).Name);
|
||||
return;
|
||||
}
|
||||
@@ -330,7 +330,7 @@ namespace PARR.DAL.Repositories.Base
|
||||
|
||||
public virtual async Task<bool> CreateAsync(T obj)
|
||||
{
|
||||
logger.LogDebug("Начинаю создание объекта типа {EntityType}", typeof(T).Name);
|
||||
_logger.LogDebug("Начинаю создание объекта типа {EntityType}", typeof(T).Name);
|
||||
|
||||
if (obj.DateCreated == DateTimeOffset.MinValue)
|
||||
obj.DateCreated = DateTimeOffset.UtcNow;
|
||||
@@ -338,73 +338,73 @@ namespace PARR.DAL.Repositories.Base
|
||||
try
|
||||
{
|
||||
await EntitySet.AddAsync(obj);
|
||||
logger.LogDebug("Объект типа {EntityType} добавлен в контекст", typeof(T).Name);
|
||||
_logger.LogDebug("Объект типа {EntityType} добавлен в контекст", typeof(T).Name);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при добавлении объекта типа {EntityType} в БД", typeof(T).Name);
|
||||
_logger.LogError(ex, "Ошибка при добавлении объекта типа {EntityType} в БД", typeof(T).Name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool Delete(T obj)
|
||||
{
|
||||
logger.LogDebug("Начинаю удаление объекта типа {EntityType}", obj.GetType().Name);
|
||||
_logger.LogDebug("Начинаю удаление объекта типа {EntityType}", obj.GetType().Name);
|
||||
|
||||
try
|
||||
{
|
||||
EntitySet.Remove(obj);
|
||||
logger.LogDebug("Объект типа {EntityType} удален из контекста", obj.GetType().Name);
|
||||
_logger.LogDebug("Объект типа {EntityType} удален из контекста", obj.GetType().Name);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при удалении объекта типа {EntityType} из БД", obj.GetType().Name);
|
||||
_logger.LogError(ex, "Ошибка при удалении объекта типа {EntityType} из БД", obj.GetType().Name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual async Task<bool> DeleteAsync(Guid id)
|
||||
{
|
||||
logger.LogDebug("Начинаю удаление объекта типа {EntityType} по ID: {Id}", typeof(T).Name, id);
|
||||
_logger.LogDebug("Начинаю удаление объекта типа {EntityType} по ID: {Id}", typeof(T).Name, id);
|
||||
|
||||
try
|
||||
{
|
||||
var exist = await GetAsync(id);
|
||||
if (exist == null)
|
||||
{
|
||||
logger.LogError("Ошибка при удалении из БД. Не найдена запись в БД типа {EntityType} с id: {Id}",
|
||||
_logger.LogError("Ошибка при удалении из БД. Не найдена запись в БД типа {EntityType} с id: {Id}",
|
||||
typeof(T).Name, id);
|
||||
return false;
|
||||
}
|
||||
|
||||
EntitySet.Remove(exist);
|
||||
logger.LogDebug("Объект типа {EntityType} с ID {Id} удален из контекста", typeof(T).Name, id);
|
||||
_logger.LogDebug("Объект типа {EntityType} с ID {Id} удален из контекста", typeof(T).Name, id);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Ошибка при удалении объекта типа {EntityType} из БД по ID: {Id}", typeof(T).Name, id);
|
||||
_logger.LogError(ex, "Ошибка при удалении объекта типа {EntityType} из БД по ID: {Id}", typeof(T).Name, id);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual IQueryable<T> Get()
|
||||
{
|
||||
logger.LogDebug("Получаю набор объектов типа {EntityType}", typeof(T).Name);
|
||||
_logger.LogDebug("Получаю набор объектов типа {EntityType}", typeof(T).Name);
|
||||
return EntitySet;
|
||||
}
|
||||
|
||||
public virtual async Task<T?> GetAsync(Guid id)
|
||||
{
|
||||
logger.LogDebug("Получаю объект типа {EntityType} по ID: {Id}", typeof(T).Name, id);
|
||||
_logger.LogDebug("Получаю объект типа {EntityType} по ID: {Id}", typeof(T).Name, id);
|
||||
return await EntitySet.FirstOrDefaultAsync(t => t.Id == id);
|
||||
}
|
||||
|
||||
public virtual IQueryable<T> GetPage(IQueryable<T> query, PaginationFilter paginationFilter)
|
||||
{
|
||||
logger.LogDebug("Получаю страницу объектов типа {EntityType}, страница: {PageNumber}, размер: {PageSize}",
|
||||
_logger.LogDebug("Получаю страницу объектов типа {EntityType}, страница: {PageNumber}, размер: {PageSize}",
|
||||
typeof(T).Name, paginationFilter.PageNumber, paginationFilter.PageSize);
|
||||
|
||||
int skip = (paginationFilter.PageNumber - 1) * paginationFilter.PageSize;
|
||||
|
||||
Reference in New Issue
Block a user