using Imprink.Domain.Entities; namespace Imprink.Domain.Repositories; public interface ICategoryRepository { Task GetByIdAsync(Guid id, CancellationToken cancellationToken = default); Task GetByIdWithSubCategoriesAsync(Guid id, CancellationToken cancellationToken = default); Task GetByIdWithProductsAsync(Guid id, CancellationToken cancellationToken = default); Task> GetAllAsync(CancellationToken cancellationToken = default); Task> GetActiveAsync(CancellationToken cancellationToken = default); Task> GetRootCategoriesAsync(CancellationToken cancellationToken = default); Task> GetSubCategoriesAsync(Guid parentCategoryId, CancellationToken cancellationToken = default); Task AddAsync(Category category, CancellationToken cancellationToken = default); Task UpdateAsync(Category category, CancellationToken cancellationToken = default); Task DeleteAsync(Guid id, CancellationToken cancellationToken = default); Task ExistsAsync(Guid id, CancellationToken cancellationToken = default); Task HasSubCategoriesAsync(Guid categoryId, CancellationToken cancellationToken = default); Task HasProductsAsync(Guid categoryId, CancellationToken cancellationToken = default); }