6
0
Fork 0
jiqu-library-server/app/Endpoint/Api/Http/Controllers/ShoppingCartItemController.php

94 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()->findOrFail($id);
$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();
}
}