61 lines
2.0 KiB
PHP
61 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers\Product;
|
|
|
|
use App\Endpoint\Api\Http\Controllers\Controller;
|
|
use App\Endpoint\Api\Http\Resources\CouponResource;
|
|
use App\Endpoint\Api\Http\Resources\ProductSkuTinyResource;
|
|
use App\Helpers\Paginator;
|
|
use App\Models\ProductPart;
|
|
use App\Models\ProductPartSku;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PartController extends Controller
|
|
{
|
|
/**
|
|
* 分区商品
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$part = null;
|
|
|
|
if (filled($key = $request->query('part'))) {
|
|
$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;
|
|
})
|
|
);
|
|
}
|
|
|
|
public function coupons(Request $request)
|
|
{
|
|
$part = null;
|
|
if (filled($partKey = $request->query('part'))) {
|
|
$part = ProductPart::where('key', $partKey)->first();
|
|
}
|
|
|
|
return response()->json([
|
|
'coupons'=> $part ? CouponResource::collection($part->getCoupons()->get()) : [],
|
|
'description' => $part?->description,
|
|
]);
|
|
}
|
|
}
|