namespace Domain.Ports.Repositories;

using Domain.Entities;
using System.Linq.Expressions;

public interface IProfessorRepository
{
    Task<Professor?> GetByIdAsync(int id, CancellationToken ct = default);
    Task<IReadOnlyList<Professor>> GetAllAsync(CancellationToken ct = default);
    Task<IReadOnlyList<Professor>> GetAllWithSubjectsAsync(CancellationToken ct = default);

    // Projection support
    Task<IReadOnlyList<TResult>> GetAllProjectedAsync<TResult>(
        Expression<Func<Professor, TResult>> selector,
        CancellationToken ct = default);
}
