using Data.SeaHavenIndustries; namespace SeaHaven.DataServices.Interfaces { public interface IVendorDataService { Task GetByIdAsync(int id); Task GetByIdWithDetailsAsync(int id); // Batched lookup: one query for the distinct requested ids, preserving input order // and skipping any ids that are not present (no rows returned for missing ids). Task> GetByIdsOrderedAsync(IReadOnlyCollection ids, CancellationToken cancellationToken); Task> GetAllAsync(); Task> GetActiveVendorsAsync(CancellationToken cancellationToken); Task> GetVendorsForFacetsAsync(bool? isActive, CancellationToken cancellationToken); Task<(IEnumerable Items, int TotalCount)> GetPagedAsync( int page, int pageSize, string? search = null, bool? isActive = true, IReadOnlyCollection? companies = null, IReadOnlyCollection? trades = null, IReadOnlyCollection? locations = null, IReadOnlyCollection? jobBuckets = null); Task AddAsync(Vendor vendor); Task UpdateAsync(Vendor vendor); Task DeleteAsync(int id); Task ExistsAsync(int id); Task GetActiveTokenForVendorAsync(int vendorId, CancellationToken cancellationToken); Task GetTokenWithVendorAsync(string token, CancellationToken cancellationToken); Task AddTokenAsync(VendorAccessToken token, CancellationToken cancellationToken); Task> GetRevocableTokensAsync(int vendorId, CancellationToken cancellationToken); Task SaveChangesAsync(CancellationToken cancellationToken); Task CountAsync(); Task GetCompanyByIdAsync(int id); Task GetCompanyByNormalizedNameAsync(string normalizedName); Task AddCompanyAsync(VendorCompany company); Task UpdateCompanyAsync(VendorCompany company); Task> GetLinkedWorkOrdersAsync(int vendorId); Task IsVendorAssignedToWorkOrderAsync(int vendorId, int workOrderId); Task UpdateWithAuditLogsAsync(Vendor vendor, IReadOnlyCollection auditLogs); } }