Browse Source

Add IProductRepository.WithDetails(...) methods

pull/57/head
gdlcf88 6 years ago
parent
commit
7ed72561bd
  1. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
  2. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/IProductRepository.cs
  3. 41
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/Products/ProductRepository.cs

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs

@ -53,8 +53,8 @@ namespace EasyAbp.EShop.Products.Products
protected override IQueryable<Product> CreateFilteredQuery(GetProductListDto input)
{
var query = input.CategoryId.HasValue
? _repository.GetQueryable(input.StoreId, input.CategoryId.Value)
: _repository.GetQueryable(input.StoreId);
? _repository.WithDetails(input.StoreId, input.CategoryId.Value)
: _repository.WithDetails(input.StoreId);
return input.ShowHidden ? query : query.Where(x => !x.IsHidden);
}
@ -261,8 +261,7 @@ namespace EasyAbp.EShop.Products.Products
foreach (var product in products)
{
// Todo: How to get list with details if the queryable is customized?
var productDto = MapToGetListOutputDto(await _repository.GetAsync(product.Id));
var productDto = MapToGetListOutputDto(product);
await LoadRealInventoriesAsync(product, productDto, input.StoreId);
await LoadPricesAsync(product, productDto, input.StoreId);

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/IProductRepository.cs

@ -10,5 +10,9 @@ namespace EasyAbp.EShop.Products.Products
IQueryable<Product> GetQueryable(Guid storeId);
IQueryable<Product> WithDetails(Guid storeId, Guid categoryId);
IQueryable<Product> WithDetails(Guid storeId);
}
}

41
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/Products/ProductRepository.cs

@ -22,19 +22,42 @@ namespace EasyAbp.EShop.Products.Products
public IQueryable<Product> GetQueryable(Guid storeId, Guid categoryId)
{
return from product in DbContext.Products
join productStore in DbContext.ProductStores on product.Id equals productStore.ProductId
join productCategory in DbContext.ProductCategories on product.Id equals productCategory.ProductId
where productStore.StoreId == storeId && productCategory.CategoryId == categoryId
select product;
return JoinProductCategories(GetQueryable(storeId), categoryId);
}
public IQueryable<Product> GetQueryable(Guid storeId)
{
return from product in DbContext.Products
join productStore in DbContext.ProductStores on product.Id equals productStore.ProductId
where productStore.StoreId == storeId
select product;
return JoinProductStores(GetQueryable(), storeId);
}
public IQueryable<Product> WithDetails(Guid storeId, Guid categoryId)
{
return JoinProductCategories(WithDetails(storeId), categoryId);
}
public IQueryable<Product> WithDetails(Guid storeId)
{
return JoinProductStores(WithDetails(), storeId);
}
protected virtual IQueryable<Product> JoinProductStores(IQueryable<Product> queryable, Guid storeId)
{
return queryable.Join(
DbContext.ProductStores.Where(productStore => productStore.StoreId == storeId),
product => product.Id,
productStore => productStore.ProductId,
(product, productStore) => product
);
}
protected virtual IQueryable<Product> JoinProductCategories(IQueryable<Product> queryable, Guid categoryId)
{
return queryable.Join(
DbContext.ProductCategories.Where(productCategory => productCategory.CategoryId == categoryId),
product => product.Id,
productCategory => productCategory.ProductId,
(product, productCategory) => product
);
}
}
}
Loading…
Cancel
Save