using Netina.Domain.Dtos.ResponseDtos.Torob; using Netina.Domain.Dtos.ResponseDtos.Zarehbin; using Netina.Domain.Entities.ProductCategories; 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() }; } public async Task ThumbSearchAsync(string name, CancellationToken cancellationToken = default) { var products = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(p => p.PersianName.Trim().ToLower().Contains(name.Trim().ToLower())) .Take(8) .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() }; } public Task ZarehbinAsync(int page, CancellationToken cancellationToken = default) { throw new NotImplementedException(); } public Task ZarehbinAsync(Guid productId, CancellationToken cancellationToken = default) { throw new NotImplementedException(); } }