From be96bd0c0794ad9cb70a1b6b36203f4be3886feb Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 11 Sep 2025 18:30:38 +0200 Subject: [PATCH] refactor(repository): add query parameter to IRepository.Where and constrain IRepository.Entity - Updated `IRepository.Where()` to accept an `Expression>` for filtering. - Added `where TEntity : IEntity` constraint to `IRepository.Entity()` method. - No functional logic changes, only interface refactoring for stronger typing and query support. --- .../Repository/Extensions.cs | 21 ++++++++++++++++--- .../Repository/IRepository.cs | 4 ++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/DigitalData.Core.Abstraction.Application/Repository/Extensions.cs b/DigitalData.Core.Abstraction.Application/Repository/Extensions.cs index 21d6874..60deaa6 100644 --- a/DigitalData.Core.Abstraction.Application/Repository/Extensions.cs +++ b/DigitalData.Core.Abstraction.Application/Repository/Extensions.cs @@ -19,37 +19,52 @@ public static class Extensions #endregion #region IRepository - public static IQueryable Get(this IRepository repository) => repository.Entity().Get(); + public static IQueryable Get(this IRepository repository) where TEntity : IEntity + => repository.Entity().Get(); - public static IQueryable Where(this IRepository repository) => repository.Entity().Where(); + public static IQueryable Where(this IRepository repository, Expression> expression) + where TEntity : IEntity + => repository.Entity().Where(expression); #region Create - public static Task CreateAsync(this IRepository repository, TEntity entity, CancellationToken cancel = default) + public static Task CreateAsync(this IRepository repository, TEntity entity, CancellationToken cancel = default) + where TEntity : IEntity => repository.Entity().CreateAsync(entity, cancel); public static Task CreateAsync(this IRepository repository, TDto dto, CancellationToken cancel = default) + where TEntity : IEntity + where TDto : IDto => repository.Entity().CreateAsync(dto, cancel); public static Task> CreateAsync(this IRepository repository, IEnumerable entities, CancellationToken cancel = default) + where TEntity : IEntity => repository.Entity().CreateAsync(entities, cancel); public static Task> CreateAsync(this IRepository repository, IEnumerable dtos, CancellationToken cancel = default) + where TEntity : IEntity + where TDto : IDto => repository.Entity().CreateAsync(dtos, cancel); #endregion Create #region Update public static Task UpdateAsync(this IRepository repository, TDto dto, Expression> expression, CancellationToken cancel = default) + where TEntity : IEntity + where TDto : IDto => repository.Entity().UpdateAsync(dto, expression, cancel); public static Task UpdateAsync(this IRepository repository, TDto dto, Func, IQueryable> query, CancellationToken cancel = default) + where TEntity : IEntity + where TDto : IDto => repository.Entity().UpdateAsync(dto, query, cancel); #endregion #region Delete public static Task DeleteAsync(this IRepository repository, Expression> expression, CancellationToken cancel = default) + where TEntity : IEntity => repository.Entity().DeleteAsync(expression, cancel); public static Task DeleteAsync(this IRepository repository, Func, IQueryable> query, CancellationToken cancel = default) + where TEntity : IEntity => repository.Entity().DeleteAsync(query, cancel); #endregion #endregion diff --git a/DigitalData.Core.Abstraction.Application/Repository/IRepository.cs b/DigitalData.Core.Abstraction.Application/Repository/IRepository.cs index 8c0ced9..25cf2bd 100644 --- a/DigitalData.Core.Abstraction.Application/Repository/IRepository.cs +++ b/DigitalData.Core.Abstraction.Application/Repository/IRepository.cs @@ -11,7 +11,7 @@ public interface IRepository public Task> CreateAsync(IEnumerable entities, CancellationToken cancel = default); - public IQueryable Where(); + public IQueryable Where(Expression> expression); public IQueryable Get(); @@ -34,5 +34,5 @@ public interface IRepository public interface IRepository { - public IRepository Entity(); + public IRepository Entity() where TEntity : IEntity; } \ No newline at end of file