using System.Linq.Expressions; namespace DigitalData.Core.Abstraction.Application.Repository; public static class Extensions { #region Create public static Task CreateAsync(this IRepository repository, TDto dto, CancellationToken ct = default) { var entity = repository.Mapper.Map(dto); return repository.CreateAsync(entity, ct); } public static Task> CreateAsync(this IRepository repository, IEnumerable dtos, CancellationToken ct = default) { var entities = dtos.Select(dto => repository.Mapper.Map(dto)); return repository.CreateAsync(entities, ct); } #endregion #region IRepository #region Read public static IEnumerable GetAll(this IRepository repository) where TEntity : IEntity => repository.Entity().GetAll(); public static Task> GetAllAsync(this IRepository repository) where TEntity : IEntity => repository.Entity().GetAllAsync(); 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 }