using System.Linq.Expressions;
namespace DigitalData.EmailProfiler.Application.Interfaces.Repositories;
///
/// Base repository interface for common CRUD operations.
///
/// Entity type
public interface IRepository where T : class
{
Task GetByIdAsync(int id, CancellationToken cancellationToken = default);
Task> GetAllAsync(CancellationToken cancellationToken = default);
Task> FindAsync(Expression> predicate, CancellationToken cancellationToken = default);
Task AddAsync(T entity, CancellationToken cancellationToken = default);
Task UpdateAsync(T entity, CancellationToken cancellationToken = default);
Task DeleteAsync(T entity, CancellationToken cancellationToken = default);
Task ExistsAsync(Expression> predicate, CancellationToken cancellationToken = default);
Task CountAsync(Expression>? predicate = null, CancellationToken cancellationToken = default);
}