商品路由分组
parent
146406a230
commit
0d09cb7bf8
|
|
@ -1,12 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Endpoint\Api\Http\Controllers;
|
||||
namespace App\Endpoint\Api\Http\Controllers\Product;
|
||||
|
||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||
use App\Endpoint\Api\Http\Resources\ProductCategoryResource;
|
||||
use App\Models\ProductCategory;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ProductCategoryController extends Controller
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
/**
|
||||
* 商品分类
|
||||
|
|
@ -1,26 +1,26 @@
|
|||
<?php
|
||||
|
||||
namespace App\Endpoint\Api\Http\Controllers;
|
||||
namespace App\Endpoint\Api\Http\Controllers\Product;
|
||||
|
||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||
use App\Endpoint\Api\Http\Resources\ProductSku\ProductSkuSimpleResource;
|
||||
use App\Models\ProductSku;
|
||||
|
||||
class HotProductController extends Controller
|
||||
class HotController extends Controller
|
||||
{
|
||||
/**
|
||||
* 热销商品
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
public function __invoke()
|
||||
{
|
||||
$productSkus = ProductSku::isRelease()
|
||||
$skus = ProductSku::isRelease()
|
||||
->whereRelation('category', 'is_show', true)
|
||||
->latest('sales')
|
||||
->limit(20)
|
||||
->get();
|
||||
|
||||
return ProductSkuSimpleResource::collection($productSkus);
|
||||
return ProductSkuSimpleResource::collection($skus);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace App\Endpoint\Api\Http\Controllers;
|
||||
namespace App\Endpoint\Api\Http\Controllers\Product;
|
||||
|
||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||
use App\Endpoint\Api\Http\Resources\ProductSku\ProductSkuSimpleResource;
|
||||
use App\Helpers\Paginator as PaginatorHelper;
|
||||
use App\Models\ProductPart;
|
||||
use App\Models\ProductPartSku;
|
||||
use App\Models\ProductSku;
|
||||
|
|
@ -12,18 +14,18 @@ use Illuminate\Pagination\Paginator;
|
|||
class ProductController extends Controller
|
||||
{
|
||||
/**
|
||||
* 商品列表
|
||||
* 筛选商品
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return ProductSkuSimpleResource::collection(
|
||||
$request->filled('part')
|
||||
? $this->filterProductsByPart($request)
|
||||
: $this->filterProducts($request)
|
||||
);
|
||||
$skus = $request->filled('part')
|
||||
? $this->filterProductsByPart($request)
|
||||
: $this->filterProducts($request);
|
||||
|
||||
return ProductSkuSimpleResource::collection($skus);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -44,7 +46,7 @@ class ProductController extends Controller
|
|||
->filter($input)
|
||||
->isRelease()
|
||||
->whereRelation('category', 'is_show', true)
|
||||
->simplePaginate($this->getPerPage($request));
|
||||
->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -67,24 +69,10 @@ class ProductController extends Controller
|
|||
})
|
||||
->where('part_id', $productPart->id)
|
||||
->latest('sort')
|
||||
->simplePaginate($this->getPerPage($request));
|
||||
->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50));
|
||||
|
||||
return $paginator->through(function ($item) {
|
||||
return $item->sku;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
protected function getPerPage(Request $request): int
|
||||
{
|
||||
$perPage = (int) $request->input('per_page');
|
||||
|
||||
if ($perPage > 0) {
|
||||
return $perPage > 50 ? 50 : $perPage;
|
||||
}
|
||||
|
||||
return 20;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
use App\Endpoint\Api\Http\Controllers\AdController;
|
||||
use App\Endpoint\Api\Http\Controllers\CaptchaController;
|
||||
use App\Endpoint\Api\Http\Controllers\HotProductController;
|
||||
use App\Endpoint\Api\Http\Controllers\LoginController;
|
||||
use App\Endpoint\Api\Http\Controllers\LogoutController;
|
||||
use App\Endpoint\Api\Http\Controllers\ProductCategoryController;
|
||||
use App\Endpoint\Api\Http\Controllers\ProductController;
|
||||
use App\Endpoint\Api\Http\Controllers\Product\CategoryController;
|
||||
use App\Endpoint\Api\Http\Controllers\Product\HotController;
|
||||
use App\Endpoint\Api\Http\Controllers\Product\ProductController;
|
||||
use App\Endpoint\Api\Http\Controllers\RegisterController;
|
||||
use App\Endpoint\Api\Http\Controllers\SmsCodeController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
|
@ -28,7 +28,9 @@ Route::group([
|
|||
|
||||
Route::get('ads', [AdController::class, 'index']);
|
||||
|
||||
Route::get('product-categories', [ProductCategoryController::class, 'index']);
|
||||
Route::get('products', [ProductController::class, 'index']);
|
||||
Route::get('hot-products', [HotProductController::class, 'index']);
|
||||
Route::prefix('product')->group(function () {
|
||||
Route::get('categories', [CategoryController::class, 'index']);
|
||||
Route::get('hot', HotController::class);
|
||||
Route::get('products', [ProductController::class, 'index']);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
class Paginator
|
||||
{
|
||||
/**
|
||||
* 解析每页显示的条数
|
||||
*
|
||||
* @param string $perPageName
|
||||
* @param int $default
|
||||
* @param int|null $max
|
||||
* @return int
|
||||
*/
|
||||
public static function resolvePerPage(string $perPageName = 'per_page', int $default = 20, ?int $max = null): int
|
||||
{
|
||||
$perPage = (int) request()->input($perPageName);
|
||||
|
||||
if ($perPage >= 1) {
|
||||
if ($max !== null && $max >= 1 && $perPage >= $max) {
|
||||
return $max;
|
||||
}
|
||||
|
||||
return $perPage;
|
||||
}
|
||||
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue