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 Read public static async Task ReadFirstOrDefaultAsync(this IRepository repository, Expression>? expression = null) => (await repository.ReadAllAsync(expression)).FirstOrDefault(); public static async Task ReadFirstAsync(this IRepository repository, Expression>? expression = null) => (await repository.ReadAllAsync(expression)).First(); public static async Task ReadSingleOrDefaultAsync(this IRepository repository, Expression>? expression = null) => (await repository.ReadAllAsync(expression)).SingleOrDefault(); public static async Task ReadSingleAsync(this IRepository repository, Expression>? expression = null) => (await repository.ReadAllAsync(expression)).Single(); #endregion }