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
}