using Netina.Core.CoreServices.Abstracts; using Netina.Domain.Dtos.ResponseDtos; using Netina.Domain.Entities.ProductCategories; using Netina.Domain.Entities.Products; using Netina.Repository.Repositories.Base.Contracts; namespace Netina.Core.CoreServices; public class SearchService : ISearchService { private readonly IRepositoryWrapper _repositoryWrapper; public SearchService(IRepositoryWrapper repositoryWrapper) { _repositoryWrapper = repositoryWrapper; } public async Task SearchAsync(string name, CancellationToken cancellationToken = default) { var products = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(p => p.PersianName.Trim().ToLower().Contains(name.Trim().ToLower())) .Select(ProductMapper.ProjectToSDto) .ToListAsync(cancellationToken); var categories = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(p => p.Name.Trim().ToLower().Contains(name.Trim().ToLower())) .Select(ProductCategoryMapper.ProjectToSDto) .ToListAsync(cancellationToken); return new SearchResponseDto { Products = products.Select(p => p.Adapt()).ToList(), Categories = categories.Select(c => c.Adapt()).ToList() }; } }