优化购物车商品
parent
4811472d88
commit
4901ee6f16
|
|
@ -17,7 +17,8 @@ class ShoppingCartItemController extends Controller
|
||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$items = $request->user()->shoppingCartItems()->with(['sku'])->has('sku')->latest('id')->get();
|
$items = $request->user()->shoppingCartItems()->latest('id')->get();
|
||||||
|
$items->load('sku:id,name,cover,sell_price,vip_price,specs,stock,release_at');
|
||||||
|
|
||||||
return ShoppingCartItemResource::collection($items);
|
return ShoppingCartItemResource::collection($items);
|
||||||
}
|
}
|
||||||
|
|
@ -31,19 +32,22 @@ class ShoppingCartItemController extends Controller
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$input = $request->validate([
|
$input = $request->validate([
|
||||||
'sku_id' => ['bail', 'required'],
|
'sku_id' => ['bail', 'required', 'int'],
|
||||||
'quantity' => ['bail', 'required', 'int', 'min:1'],
|
'quantity' => ['bail', 'required', 'int', 'min:1'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$sku = ProductSku::whereRelation('category', 'is_show', true)->online()->find($input['sku_id']);
|
if (is_null($sku = ProductSku::online()->find($input['sku_id']))) {
|
||||||
|
|
||||||
if ($sku === null) {
|
|
||||||
throw new ProductOfflineException();
|
throw new ProductOfflineException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = $request->user()->shoppingCartItems()->firstOrCreate([
|
$item = $request->user()->shoppingCartItems()->firstOrCreate([
|
||||||
'sku_id' => $sku->id,
|
'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'],
|
'quantity' => $input['quantity'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
@ -69,7 +73,17 @@ class ShoppingCartItemController extends Controller
|
||||||
|
|
||||||
$item = $request->user()->shoppingCartItems()->findOrFail($id);
|
$item = $request->user()->shoppingCartItems()->findOrFail($id);
|
||||||
|
|
||||||
$item->update($input);
|
if (is_null($sku = $item->sku()->online()->first())) {
|
||||||
|
throw new ProductOfflineException();
|
||||||
|
}
|
||||||
|
|
||||||
|
$item->update(array_merge($input, [
|
||||||
|
'name' => $sku->name,
|
||||||
|
'cover' => $sku->cover,
|
||||||
|
'sell_price' => $sku->sell_price,
|
||||||
|
'vip_price' => $sku->vip_price,
|
||||||
|
'specs' => $sku->specs,
|
||||||
|
]));
|
||||||
|
|
||||||
return response()->noContent();
|
return response()->noContent();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Endpoint\Api\Http\Resources\ProductSku;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class ProductSkuShoppingCartResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'name' => $this->name,
|
||||||
|
'cover' => (string) $this->cover,
|
||||||
|
'sell_price' => $this->sell_price,
|
||||||
|
'vip_price' => (string) $this->vip_price,
|
||||||
|
'specs' => array_values((array) $this->specs),
|
||||||
|
'stock' => (int) $this->saleable_stock,
|
||||||
|
'is_online' => $this->isOnline(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace App\Endpoint\Api\Http\Resources;
|
namespace App\Endpoint\Api\Http\Resources;
|
||||||
|
|
||||||
use App\Endpoint\Api\Http\Resources\ProductSku\ProductSkuSimpleResource;
|
use App\Endpoint\Api\Http\Resources\ProductSku\ProductSkuShoppingCartResource;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
class ShoppingCartItemResource extends JsonResource
|
class ShoppingCartItemResource extends JsonResource
|
||||||
|
|
@ -17,7 +17,7 @@ class ShoppingCartItemResource extends JsonResource
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'id' => $this->id,
|
'id' => $this->id,
|
||||||
'sku' => ProductSkuSimpleResource::make($this->whenLoaded('sku')),
|
'sku' => ProductSkuShoppingCartResource::make($this->whenLoaded('sku')),
|
||||||
'quantity' => $this->quantity,
|
'quantity' => $this->quantity,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@ class ShoppingCartItem extends Model
|
||||||
$sku->sell_price = $item->sell_price;
|
$sku->sell_price = $item->sell_price;
|
||||||
$sku->vip_price = $item->vip_price;
|
$sku->vip_price = $item->vip_price;
|
||||||
$sku->specs = $item->specs;
|
$sku->specs = $item->specs;
|
||||||
|
$sku->stock = 0;
|
||||||
|
$sku->release_at = null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue