102 lines
2.9 KiB
PHP
102 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers\Dealer;
|
|
|
|
use App\Endpoint\Api\Http\Controllers\Controller;
|
|
use App\Models\DealerProduct;
|
|
use App\Services\Dealer\OrderService;
|
|
use Illuminate\Http\Request;
|
|
|
|
class ShoppingCartItemController extends Controller
|
|
{
|
|
/**
|
|
* 购物车商品列表
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function index(Request $request, OrderService $orderService)
|
|
{
|
|
$user = $request->user();
|
|
$items = $user->dealerShoppingCartItems()->latest('id')->get();
|
|
$items->load('product');
|
|
$totalQty = $items->sum('quantity');
|
|
$data = [];
|
|
foreach ($items as $item) {
|
|
$data[] = [
|
|
'id'=>$item->id,
|
|
'name' =>$item->name,
|
|
'cover'=>$item->cover,
|
|
'sell_price'=>$item->sell_price,
|
|
'dealer_price' =>$orderService->getSalePrice($user, $item->product, $totalQty),
|
|
'quantity'=>$item->quantity,
|
|
];
|
|
}
|
|
|
|
return response()->json(['data'=>$data]);
|
|
}
|
|
|
|
/**
|
|
* 加入购物车
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$input = $request->validate([
|
|
'product_id' => ['bail', 'required', 'int'],
|
|
'quantity' => ['bail', 'required', 'int', 'min:1'],
|
|
]);
|
|
|
|
$product = DealerProduct::online()->findOrFail($input['product_id']);
|
|
|
|
$shoppingCartItem = $request->user()->dealerShoppingCartItems()->firstOrCreate([
|
|
'product_id' => $product->id,
|
|
], [
|
|
'name' => $product->name,
|
|
'cover' => $product->cover,
|
|
'sell_price' => $product->price,
|
|
'quantity' => $input['quantity'],
|
|
]);
|
|
if (!$shoppingCartItem->wasRecentlyCreated) {
|
|
$shoppingCartItem->increment('quantity', $input['quantity']);
|
|
}
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 购物车变动
|
|
*/
|
|
public function update($id, Request $request)
|
|
{
|
|
$input = $request->validate([
|
|
'quantity' => ['bail', 'required', 'int', 'min:1'],
|
|
]);
|
|
|
|
$shoppingCartItem = $request->user()->dealerShoppingCartItems()->findOrFail($id);
|
|
|
|
$product = DealerProduct::online()->findOrFail($shoppingCartItem->product_id);
|
|
|
|
$shoppingCartItem->update(array_merge($input, [
|
|
'name' => $product->name,
|
|
'cover' => $product->cover,
|
|
'sell_price' => $product->price,
|
|
]));
|
|
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 移出购物车
|
|
*/
|
|
public function delete(Request $request)
|
|
{
|
|
$input = $request->validate([
|
|
'ids' => ['bail', 'required', 'array'],
|
|
]);
|
|
|
|
$request->user()->dealerShoppingCartItems()->whereIn('id', $input['ids'])->delete();
|
|
|
|
return response()->noContent();
|
|
}
|
|
}
|