using PARR.Domain.Common.Pagination;
using PARR.Domain.Entities.Base;
using PARR.Domain.Entities.Base.History;

namespace PARR.Core.Repositories.Base
{
    public interface IBaseRepository<T> where T : class, IBaseEntity
    {
        Task<T?> GetAsync(Guid id);

        IQueryable<T> Get();

        IQueryable<T> GetPage(IQueryable<T> query, PaginationFilter paginationFilter);

        Task<bool> CreateAsync(T obj);

        Task<bool> AddRangeAsync(List<T> objs);

        Task<bool> DeleteAsync(Guid id);

        bool Delete(T obj);

        Task<bool> CommitAsync(IHistoryInitiator? initiator = null);
    }
}
