75 lines
2.6 KiB
C#
75 lines
2.6 KiB
C#
using Netina.Domain.Entities.Brands;
|
|
using Netina.Domain.Entities.Products;
|
|
|
|
namespace Netina.Repository.Handlers.Brands;
|
|
|
|
public class GetBrandsQueryHandler(IRepositoryWrapper repositoryWrapper, IMediator mediator)
|
|
: IRequestHandler<GetBrandsQuery, List<BrandSDto>>
|
|
{
|
|
private readonly IMediator _mediator = mediator;
|
|
|
|
public async Task<List<BrandSDto>> Handle(GetBrandsQuery request, CancellationToken cancellationToken)
|
|
{
|
|
IQueryable<Brand> baseBrands;
|
|
List<BrandSDto> brands = new List<BrandSDto>();
|
|
if (request.CategoryId != default)
|
|
{
|
|
//var products = await _mediator.Send(new GetProductsQuery(BrandIds: null,SpecialOffer: null, Page:0, SortBy: QuerySortBy.None,CategoryId: request.CategoryId, IsActive : null),
|
|
// cancellationToken);
|
|
|
|
var cats = await mediator.Send(new GetProductCategoryChildrenQuery(request.CategoryId), cancellationToken);
|
|
|
|
var brandGrouped = await repositoryWrapper.SetRepository<Product>()
|
|
.TableNoTracking
|
|
.Where(p => cats.Contains(p.CategoryId))
|
|
.GroupBy(p=>p.BrandId)
|
|
.ToListAsync(cancellationToken);
|
|
|
|
foreach (var grouping in brandGrouped)
|
|
{
|
|
if (grouping.Key != default)
|
|
{
|
|
var brand = await repositoryWrapper.SetRepository<Brand>()
|
|
.TableNoTracking
|
|
.Where(b => b.Id == grouping.Key)
|
|
.Select(BrandMapper.ProjectToSDto)
|
|
.FirstOrDefaultAsync(cancellationToken);
|
|
if(brand!=null)
|
|
brands.Add(brand);
|
|
}
|
|
}
|
|
|
|
return brands;
|
|
}
|
|
|
|
if (request.BrandName != null)
|
|
{
|
|
baseBrands = repositoryWrapper.SetRepository<Brand>()
|
|
.TableNoTracking
|
|
.Where(b => b.PersianName.Trim().Contains(request.BrandName.Trim()))
|
|
.OrderByDescending(b => b.CreatedAt);
|
|
}
|
|
else
|
|
{
|
|
|
|
baseBrands = repositoryWrapper.SetRepository<Brand>().TableNoTracking
|
|
.OrderByDescending(b => b.CreatedAt);
|
|
}
|
|
|
|
if (request.Page != null)
|
|
{
|
|
brands = await baseBrands.Skip(request.Page.Value * 10).Take(10)
|
|
.Select(BrandMapper.ProjectToSDto)
|
|
.ToListAsync(cancellationToken);
|
|
}
|
|
else
|
|
{
|
|
|
|
brands = await baseBrands
|
|
.Select(BrandMapper.ProjectToSDto)
|
|
.ToListAsync(cancellationToken);
|
|
}
|
|
|
|
return brands;
|
|
}
|
|
} |