diff --git a/app/Endpoint/Api/Http/Controllers/Product/PartController.php b/app/Endpoint/Api/Http/Controllers/Product/PartController.php new file mode 100644 index 00000000..a02a804c --- /dev/null +++ b/app/Endpoint/Api/Http/Controllers/Product/PartController.php @@ -0,0 +1,46 @@ +query('key'))) { + $part = ProductPart::where('key', $key)->first(); + } + + $paginator = ProductPartSku::with('sku:id,name,cover,sell_price,vip_price') + ->whereHas('sku', function ($query) { + return $query->online(); + }) + ->when($part, function ($query, $part) { + $query->where('part_id', $part->id); + }, function ($query) { + $query->whereRaw('1!=1'); + }) + ->latest('sort') + ->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); + + return ProductSkuTinyResource::collection( + $paginator->through(function ($item) { + return $item->sku; + }) + ); + } +} diff --git a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php index 8f511e63..a3a9cab5 100644 --- a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php +++ b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php @@ -6,14 +6,11 @@ use App\Endpoint\Api\Http\Controllers\Controller; use App\Endpoint\Api\Http\Resources\ProduckSkuResource; use App\Endpoint\Api\Http\Resources\ProductSkuTinyResource; use App\Events\ProductSku\Viewed; -use App\Helpers\Paginator as PaginatorHelper; -use App\Models\ProductPart; -use App\Models\ProductPartSku; +use App\Helpers\Paginator; use App\Models\ProductSku; use App\Models\ProductSkuFavorite; use App\Models\ProductSpu; use Illuminate\Http\Request; -use Illuminate\Pagination\Paginator; class ProductSkuController extends Controller { @@ -25,9 +22,16 @@ class ProductSkuController extends Controller */ public function index(Request $request) { - $skus = $request->filled('part') - ? $this->filterProductsByPart($request) - : $this->filterProducts($request); + $input = $request->input(); + + if ($request->isNotFilled('sort')) { + $input['sort'] = '-id'; + } + + $skus = ProductSku::select(['id', 'name', 'cover', 'sell_price', 'vip_price']) + ->filter($input) + ->online() + ->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); return ProductSkuTinyResource::collection($skus); } @@ -134,51 +138,4 @@ class ProductSkuController extends Controller return response()->noContent(); } - - /** - * 过滤商品 - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Pagination\Paginator - */ - protected function filterProducts(Request $request): Paginator - { - $input = $request->input(); - - if ($request->isNotFilled('sort')) { - $input['sort'] = '-id'; - } - - return ProductSku::select(['id', 'name', 'cover', 'sell_price', 'vip_price']) - ->filter($input) - ->online() - ->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50)); - } - - /** - * 按分区过滤商品 - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Pagination\Paginator - */ - protected function filterProductsByPart(Request $request): Paginator - { - $productPart = ProductPart::where('key', $request->input('part'))->first(); - - if ($productPart === null) { - return new Paginator([], $this->getPerPage($request), Paginator::resolveCurrentPage()); - } - - $paginator = ProductPartSku::with('sku:id,name,cover,sell_price,vip_price') - ->whereHas('sku', function ($query) { - return $query->online(); - }) - ->where('part_id', $productPart->id) - ->latest('sort') - ->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50)); - - return $paginator->through(function ($item) { - return $item->sku; - }); - } } diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 68630073..88d71491 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -15,6 +15,7 @@ use App\Endpoint\Api\Http\Controllers\MessageController; use App\Endpoint\Api\Http\Controllers\Order\OrderController; use App\Endpoint\Api\Http\Controllers\Order\OrderVerifyController; use App\Endpoint\Api\Http\Controllers\Product\HotController; +use App\Endpoint\Api\Http\Controllers\Product\PartController; use App\Endpoint\Api\Http\Controllers\Product\ProductCategoryController; use App\Endpoint\Api\Http\Controllers\Product\ProductFavoriteController; use App\Endpoint\Api\Http\Controllers\Product\ProductSkuController; @@ -50,6 +51,8 @@ Route::group([ Route::get('product/categories', [ProductCategoryController::class, 'index']); // 热销商品 Route::get('product/hot', HotController::class); + // 商品分区 + Route::get('product/part', PartController::class); // 筛选商品 Route::get('product/products', [ProductSkuController::class, 'index']); // 查看商品