97 lines
2.4 KiB
PHP
97 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers;
|
|
|
|
use App\Endpoint\Api\Http\Resources\ShoppingCartItemResource;
|
|
use App\Exceptions\BizException;
|
|
use App\Models\ProductSku;
|
|
use Illuminate\Http\Request;
|
|
|
|
class ShoppingCartItemController extends Controller
|
|
{
|
|
/**
|
|
* 购物车商品列表
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$items = $request->user()->shoppingCartItems()->with(['sku'])->has('sku')->latest('id')->get();
|
|
|
|
return ShoppingCartItemResource::collection($items);
|
|
}
|
|
|
|
/**
|
|
* 添加购物车商品
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$input = $request->validate([
|
|
'sku_id' => ['bail', 'required'],
|
|
'qty' => ['bail', 'required', 'int', 'min:1'],
|
|
]);
|
|
|
|
$sku = ProductSku::whereRelation('category', 'is_show', true)->online()->find($input['sku_id']);
|
|
|
|
if ($sku === null) {
|
|
throw new BizException(__('Product has been removed'));
|
|
}
|
|
|
|
$item = $request->user()->shoppingCartItems()->firstOrCreate([
|
|
'sku_id' => $sku->id,
|
|
], [
|
|
'qty' => $input['qty'],
|
|
]);
|
|
|
|
if (! $item->wasRecentlyCreated) {
|
|
$item->increment('qty', $input['qty']);
|
|
}
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 修改购物车商品
|
|
*
|
|
* @param int $id
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update($id, Request $request)
|
|
{
|
|
$input = $request->validate([
|
|
'qty' => ['bail', 'required', 'int', 'min:1'],
|
|
]);
|
|
|
|
$item = $request->user()->shoppingCartItems()->find($id);
|
|
|
|
if ($item === null) {
|
|
}
|
|
|
|
$item->update($input);
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 删除购物车商品
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function delete(Request $request)
|
|
{
|
|
$input = $request->validate([
|
|
'ids' => ['bail', 'required', 'array'],
|
|
]);
|
|
|
|
$request->user()->shoppingCartItems()->whereIn('id', $input['ids'])->delete();
|
|
|
|
return response()->noContent();
|
|
}
|
|
}
|