6
0
Fork 0

商品路由分组

release
李静 2021-11-30 14:00:30 +08:00
parent 146406a230
commit 0d09cb7bf8
5 changed files with 57 additions and 37 deletions

View File

@ -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
{
/**
* 商品分类

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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']);
});
});

View File

@ -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;
}
}