user()->shoppingCartItems()->latest('id')->get(); $items->load('sku:id,name,cover,sell_price,vip_price,specs,stock,release_at'); 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', 'int'], 'quantity' => ['bail', 'required', 'int', 'min:1'], ]); if (is_null($sku = ProductSku::online()->find($input['sku_id']))) { throw new ProductOfflineException(); } if ($input['quantity'] > $sku->saleable_stock) { throw new ProductNotEnoughException(); } $shoppingCartItem = $request->user()->shoppingCartItems()->firstOrCreate([ 'sku_id' => $sku->id, ], [ 'name' => $sku->name, 'cover' => $sku->cover, 'sell_price' => $sku->sell_price, 'vip_price' => $sku->vip_price, 'specs' => $sku->specs, 'quantity' => $input['quantity'], ]); $shoppingCartItem->setRelation('sku', $sku); if (! $shoppingCartItem->wasRecentlyCreated) { if ($shoppingCartItem->quantity + $input['quantity'] > $sku->saleable_stock) { throw new ProductNotEnoughException(); } $shoppingCartItem->increment('quantity', $input['quantity']); } return ShoppingCartItemResource::make($shoppingCartItem); } /** * 修改购物车商品 * * @param int $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function update($id, Request $request) { $input = $request->validate([ 'quantity' => ['bail', 'required', 'int', 'min:1'], ]); $shoppingCartItem = $request->user()->shoppingCartItems()->findOrFail($id); if (is_null($sku = $shoppingCartItem->sku()->online()->first())) { throw new ProductOfflineException(); } if ($input['quantity'] > $sku->saleable_stock) { throw new ProductNotEnoughException(); } $shoppingCartItem->update(array_merge($input, [ 'name' => $sku->name, 'cover' => $sku->cover, 'sell_price' => $sku->sell_price, 'vip_price' => $sku->vip_price, 'specs' => $sku->specs, ])); return ShoppingCartItemResource::make($shoppingCartItem); } /** * 删除购物车商品 * * @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(); } }