using IamService.Domain.SeedWork;

namespace IamService.Domain.AggregatesModel.AccessReviewAggregate;

/// <summary>
/// EN: Repository interface for AccessReview aggregate.
/// VI: Interface repository cho AccessReview aggregate.
/// </summary>
public interface IAccessReviewRepository : IRepository<AccessReview>
{
    AccessReview Add(AccessReview review);
    void Update(AccessReview review);
    Task<AccessReview?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
    Task<AccessReview?> GetByIdWithItemsAsync(Guid id, CancellationToken cancellationToken = default);
    Task<IEnumerable<AccessReview>> GetByOwnerIdAsync(Guid ownerId, CancellationToken cancellationToken = default);
    Task<IEnumerable<AccessReview>> GetActiveReviewsAsync(CancellationToken cancellationToken = default);
}
