using System.Linq.Expressions; namespace StoreService.Repositories; /// /// Generic repository abstraction for simple CRUD & query operations. /// /// Entity type. public interface IGenericRepository where TEntity : class { #region Query IQueryable Get( Expression>? filter = null, Func, IOrderedQueryable>? orderBy = null, params Expression>[] includes); Task FirstOrDefaultAsync(Expression> predicate, params Expression>[] includes); TEntity? GetById(object id); Task GetByIdAsync(object id); #endregion #region Mutations void Add(TEntity entity); Task AddAsync(TEntity entity); void AddRange(IEnumerable entities); void Update(TEntity entity); void Delete(object id); void Delete(TEntity entity); void DeleteRange(IEnumerable entities); #endregion }