6
0
Fork 0
jiqu-library-server/app/Endpoint/Api/Http/Controllers/Dealer/ShoppingCartItemController.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();
}
}