diff --git a/Mango.Nop.Core/Interfaces/IMgModelDtoBase.cs b/Mango.Nop.Core/Interfaces/IMgModelDtoBase.cs new file mode 100644 index 0000000..ba2705f --- /dev/null +++ b/Mango.Nop.Core/Interfaces/IMgModelDtoBase.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces; +using AyCode.Interfaces.Entities; + +namespace Mango.Nop.Core.Interfaces; + +public interface IMgModelDtoBase : IEntityInt //: IAcModelDtoBase //TODO: IEntityGuid gond... - J. +{ + +} \ No newline at end of file diff --git a/Mango.Nop.Core/Repositories/MgDbTableBase.cs b/Mango.Nop.Core/Repositories/MgDbTableBase.cs index f2fd63c..3a51f77 100644 --- a/Mango.Nop.Core/Repositories/MgDbTableBase.cs +++ b/Mango.Nop.Core/Repositories/MgDbTableBase.cs @@ -1,8 +1,11 @@ using System.Linq.Expressions; +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; using Mango.Nop.Core.Interfaces; using Nop.Core; using Nop.Core.Caching; using Nop.Core.Configuration; +using Nop.Core.Domain.Common; using Nop.Core.Events; using Nop.Data; @@ -16,64 +19,160 @@ public class MgDbTableBase(IEventPublisher eventPublisher, INopDataProv protected IShortTermCacheManager ShortTermCacheManager = shortTermCacheManager; protected IStaticCacheManager StaticCacheManager = staticCacheManager; + #region SetTimeStampInfos + private static void SetTimeStampCreated(TEntity entity) + { + if (typeof(TEntity).GetInterface(nameof(ITimeStampCreated)) != null) + { + ((entity as ITimeStampCreated)!).Created = DateTime.UtcNow; + } + } + private static void SetTimeStampModified(TEntity entity) + { + if (typeof(TEntity).GetInterface(nameof(ITimeStampModified)) != null) + { + ((entity as ITimeStampModified)!).Modified = DateTime.UtcNow; + } + } + #endregion SetTimeStampInfos + + #region OnCrudEvents + private void OnInsert(IList entities) + { + foreach (var entity in entities) OnInsert(entity); + } + + protected virtual void OnInsert(TEntity entity) + { + SetTimeStampCreated(entity); + SetTimeStampModified(entity); + } + + private void OnUpdate(IList entities) + { + foreach (var entity in entities) OnUpdate(entity); + } + + protected virtual void OnUpdate(TEntity entity) => SetTimeStampModified(entity); + + private void OnDelete(IList entities) + { + foreach (var entity in entities) OnDelete(entity); + } + + protected virtual void OnDelete(TEntity entity) + { + if (typeof(TEntity).GetInterface(nameof(ISoftDeletedEntity)) != null) + { + SetTimeStampModified(entity); + } + + } + #endregion OnCrudEvents + + #region Insert + + public override void Insert(TEntity entity, bool publishEvent = true) + { + OnInsert(entity); + base.Insert(entity, publishEvent); + } + + public override void Insert(IList entities, bool publishEvent = true) + { + OnInsert(entities); + base.Insert(entities, publishEvent); + } + + public override Task InsertAsync(TEntity entity, bool publishEvent = true) + { + OnInsert(entity); + return base.InsertAsync(entity, publishEvent); + } + + public override Task InsertAsync(IList entities, bool publishEvent = true) + { + OnInsert(entities); + return base.InsertAsync(entities, publishEvent); + } + #endregion Insert + + #region Update public override void Update(TEntity entity, bool publishEvent = true) { + OnUpdate(entity); base.Update(entity, publishEvent); } public override void Update(IList entities, bool publishEvent = true) { + OnUpdate(entities); base.Update(entities, publishEvent); } public override Task UpdateAsync(TEntity entity, bool publishEvent = true) { + OnUpdate(entity); return base.UpdateAsync(entity, publishEvent); } public override Task UpdateAsync(IList entities, bool publishEvent = true) { + OnUpdate(entities); return base.UpdateAsync(entities, publishEvent); } + #endregion Update + #region Delete protected override Task DeleteAsync(IList entities) { + OnDelete(entities); return base.DeleteAsync(entities); } protected override Task DeleteAsync(IList entities) { + if(typeof(T) == typeof(TEntity)) OnDelete(entities.Cast().ToList()); + return base.DeleteAsync(entities); } protected override IQueryable AddDeletedFilter(IQueryable query, in bool includeDeleted) { + foreach (var entity in query) OnDelete(entity); + return base.AddDeletedFilter(query, in includeDeleted); } public override Task DeleteAsync(TEntity entity, bool publishEvent = true) { + OnDelete(entity); return base.DeleteAsync(entity, publishEvent); } public override Task DeleteAsync(IList entities, bool publishEvent = true) { + OnDelete(entities); return base.DeleteAsync(entities, publishEvent); } public override Task DeleteAsync(Expression> predicate) { + //TODO:ide mit kéne?! - J. return base.DeleteAsync(predicate); } public override void Delete(TEntity entity, bool publishEvent = true) { + OnDelete(entity); base.Delete(entity, publishEvent); } public override int Delete(Expression> predicate) { + //TODO:ide mit kéne?! - J. return base.Delete(predicate); } + #endregion Delete } \ No newline at end of file