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'); + } +}