From 560ae2865c415af43e73fc09992928b20422f1e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Fri, 3 Dec 2021 11:03:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E8=97=8F=E5=95=86=E5=93=81/=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E5=95=86=E5=93=81=E6=94=B6=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Product/ProductSkuController.php | 39 +++++++++++++++++++ app/Endpoint/Api/routes.php | 5 +++ app/Models/ProductSkuFavorite.php | 25 ++++++++++++ ...440_create_product_sku_favorites_table.php | 36 +++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 app/Models/ProductSkuFavorite.php create mode 100644 database/migrations/2021_12_03_095440_create_product_sku_favorites_table.php diff --git a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php index a00a8f40..ff950b57 100644 --- a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php +++ b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php @@ -10,6 +10,7 @@ use App\Helpers\Paginator as PaginatorHelper; use App\Models\ProductPart; use App\Models\ProductPartSku; use App\Models\ProductSku; +use App\Models\ProductSkuFavorite; use App\Models\ProductSpu; use Illuminate\Http\Request; use Illuminate\Pagination\Paginator; @@ -111,6 +112,44 @@ class ProductSkuController extends Controller ]); } + /** + * 收藏商品 + * + * @param int $id + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function collect($id, Request $request) + { + $sku = ProductSku::findOrFail($id); + + ProductSkuFavorite::firstOrCreate([ + 'user_id' => $request->user()->id, + 'sku_id' => $sku->id, + ], [ + 'spu_id' => $sku->spu_id, + ]); + + return response()->noContent(); + } + + /** + * 取消商品收藏 + * + * @param int $id + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function uncollect($id, Request $request) + { + ProductSkuFavorite::query() + ->where('user_id', $request->user()->id) + ->where('sku_id', $id) + ->delete(); + + return response()->noContent(); + } + /** * 过滤商品 * diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 23ecca74..87697df3 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -40,6 +40,11 @@ Route::group([ Route::get('products/{product}', [ProductSkuController::class, 'show']); Route::middleware(['auth:api'])->group(function () { + // 收藏商品 + Route::post('products/{product}/collect', [ProductSkuController::class, 'collect']); + // 取消商品收藏 + Route::post('products/{product}/uncollect', [ProductSkuController::class, 'uncollect']); + // 商品浏览记录 Route::get('view-logs', [ProductViewLogController::class, 'index']); }); }); diff --git a/app/Models/ProductSkuFavorite.php b/app/Models/ProductSkuFavorite.php new file mode 100644 index 00000000..75d4340f --- /dev/null +++ b/app/Models/ProductSkuFavorite.php @@ -0,0 +1,25 @@ +belongsTo(ProductSku::class, 'sku_id'); + } +} diff --git a/database/migrations/2021_12_03_095440_create_product_sku_favorites_table.php b/database/migrations/2021_12_03_095440_create_product_sku_favorites_table.php new file mode 100644 index 00000000..a5c04120 --- /dev/null +++ b/database/migrations/2021_12_03_095440_create_product_sku_favorites_table.php @@ -0,0 +1,36 @@ +id(); + $table->unsignedBigInteger('user_id')->comment('用户ID'); + $table->unsignedBigInteger('spu_id')->comment('SPU ID'); + $table->unsignedBigInteger('sku_id')->comment('SKU ID'); + $table->timestamps(); + + $table->unique(['user_id', 'sku_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('product_sku_favorites'); + } +}