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); }