using System.Linq.Expressions; namespace DigitalData.Core.Abstraction.Application.Repository; public static class Extensions { #region IRepository #region Read public static IEnumerable GetAll(this IRepository repository) where TEntity : IEntity => repository.Entity().GetAll(); public static Task> GetAllAsync(this IRepository repository, CancellationToken cancel = default) where TEntity : IEntity => repository.Entity().GetAllAsync(cancel); public static IQueryable Where(this IRepository repository, Expression> expression) where TEntity : IEntity => repository.Entity().Where(expression); #endregion #region Create 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 }