using System.Linq.Expressions;
namespace DramaLing.Api.Contracts.Repositories;
///
/// 泛型 Repository 介面,提供基本的 CRUD 操作
///
/// 實體類型
public interface IRepository where T : class
{
// 查詢操作
Task GetByIdAsync(object id);
Task> GetAllAsync();
Task> FindAsync(Expression> predicate);
Task FirstOrDefaultAsync(Expression> predicate);
Task ExistsAsync(Expression> predicate);
Task CountAsync(Expression>? predicate = null);
// 分頁查詢
Task<(IEnumerable Items, int TotalCount)> GetPagedAsync(
int pageNumber,
int pageSize,
Expression>? filter = null,
Func, IOrderedQueryable>? orderBy = null);
// 修改操作
Task AddAsync(T entity);
Task> AddRangeAsync(IEnumerable entities);
Task UpdateAsync(T entity);
Task UpdateRangeAsync(IEnumerable entities);
Task DeleteAsync(T entity);
Task DeleteAsync(object id);
Task DeleteRangeAsync(IEnumerable entities);
// 工作單元
Task SaveChangesAsync();
}