From 4901ee6f1671ab642d488c3a76e948dfe2faa361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Fri, 10 Dec 2021 10:34:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B4=AD=E7=89=A9=E8=BD=A6?= =?UTF-8?q?=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShoppingCartItemController.php | 26 +++++++++++++---- .../ProductSkuShoppingCartResource.php | 28 +++++++++++++++++++ .../Resources/ShoppingCartItemResource.php | 4 +-- app/Models/ShoppingCartItem.php | 2 ++ 4 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 app/Endpoint/Api/Http/Resources/ProductSku/ProductSkuShoppingCartResource.php diff --git a/app/Endpoint/Api/Http/Controllers/ShoppingCartItemController.php b/app/Endpoint/Api/Http/Controllers/ShoppingCartItemController.php index b46a2c85..112aa77d 100644 --- a/app/Endpoint/Api/Http/Controllers/ShoppingCartItemController.php +++ b/app/Endpoint/Api/Http/Controllers/ShoppingCartItemController.php @@ -17,7 +17,8 @@ class ShoppingCartItemController extends Controller */ 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); } @@ -31,19 +32,22 @@ class ShoppingCartItemController extends Controller public function store(Request $request) { $input = $request->validate([ - 'sku_id' => ['bail', 'required'], + 'sku_id' => ['bail', 'required', 'int'], 'quantity' => ['bail', 'required', 'int', 'min:1'], ]); - $sku = ProductSku::whereRelation('category', 'is_show', true)->online()->find($input['sku_id']); - - if ($sku === null) { + if (is_null($sku = ProductSku::online()->find($input['sku_id']))) { throw new ProductOfflineException(); } $item = $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'], ]); @@ -69,7 +73,17 @@ class ShoppingCartItemController extends Controller $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(); } diff --git a/app/Endpoint/Api/Http/Resources/ProductSku/ProductSkuShoppingCartResource.php b/app/Endpoint/Api/Http/Resources/ProductSku/ProductSkuShoppingCartResource.php new file mode 100644 index 00000000..626b89ca --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/ProductSku/ProductSkuShoppingCartResource.php @@ -0,0 +1,28 @@ + $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(), + ]; + } +} diff --git a/app/Endpoint/Api/Http/Resources/ShoppingCartItemResource.php b/app/Endpoint/Api/Http/Resources/ShoppingCartItemResource.php index 0cb31037..17961846 100644 --- a/app/Endpoint/Api/Http/Resources/ShoppingCartItemResource.php +++ b/app/Endpoint/Api/Http/Resources/ShoppingCartItemResource.php @@ -2,7 +2,7 @@ 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; class ShoppingCartItemResource extends JsonResource @@ -17,7 +17,7 @@ class ShoppingCartItemResource extends JsonResource { return [ 'id' => $this->id, - 'sku' => ProductSkuSimpleResource::make($this->whenLoaded('sku')), + 'sku' => ProductSkuShoppingCartResource::make($this->whenLoaded('sku')), 'quantity' => $this->quantity, ]; } diff --git a/app/Models/ShoppingCartItem.php b/app/Models/ShoppingCartItem.php index ab4ec52a..d775ac92 100644 --- a/app/Models/ShoppingCartItem.php +++ b/app/Models/ShoppingCartItem.php @@ -40,6 +40,8 @@ class ShoppingCartItem extends Model $sku->sell_price = $item->sell_price; $sku->vip_price = $item->vip_price; $sku->specs = $item->specs; + $sku->stock = 0; + $sku->release_at = null; }); } }