You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.5 KiB
90 lines
2.5 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\User; // 定义命名空间
|
|
|
|
use App\Models\Product; // 引入产品模型
|
|
use App\Models\User; // 引入用户模型
|
|
use Auth; // 引入认证类
|
|
use Illuminate\Http\Request; // 引入请求类
|
|
use App\Http\Controllers\Controller; // 引入基础控制器类
|
|
|
|
/**
|
|
* 用户收藏控制器
|
|
*
|
|
* 该控制器处理用户对产品的收藏(点赞)功能。
|
|
*/
|
|
class LikesController extends Controller
|
|
{
|
|
/**
|
|
* 默认响应信息
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $response = [
|
|
'code' => 1,
|
|
'msg' => '服务器异常,请稍后再试',
|
|
];
|
|
|
|
/**
|
|
* 显示用户收藏的产品列表
|
|
*
|
|
* @return \Illuminate\View\View
|
|
*/
|
|
public function index()
|
|
{
|
|
/**
|
|
* @var $user User
|
|
*/
|
|
$user = auth()->user(); // 获取当前用户
|
|
|
|
// 获取用户收藏的产品,按最新排序并分页
|
|
$likesProducts = $user->products()
|
|
->where('user_id', auth()->id())
|
|
->withCount('users') // 统计每个产品的收藏用户数
|
|
->latest() // 按照创建时间降序排列
|
|
->paginate(10); // 每页显示10个产品
|
|
|
|
// 返回用户收藏产品的视图
|
|
return view('user.products.likes', compact('likesProducts'));
|
|
}
|
|
|
|
/**
|
|
* 切换产品的收藏状态
|
|
*
|
|
* @param string $uuid 产品的唯一标识符
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function toggle($uuid)
|
|
{
|
|
/**
|
|
* @var $product Product
|
|
*/
|
|
$product = Product::query()
|
|
->where('uuid', $uuid) // 根据 UUID 查找产品
|
|
->firstOrFail(); // 如果未找到,抛出 404 异常
|
|
|
|
$user = auth()->id(); // 获取当前用户的 ID
|
|
|
|
// 检查当前用户是否已经收藏该产品
|
|
if ($product->users()->where('user_id', $user)->exists()) {
|
|
// 如果已收藏,则取消收藏
|
|
$product->users()->detach($user);
|
|
|
|
// 返回 JSON 响应,表示已取消收藏
|
|
return response()->json([
|
|
'code' => 200,
|
|
'msg' => '欢迎下次收藏'
|
|
]);
|
|
}
|
|
|
|
// 如果未收藏,则添加收藏
|
|
$product->users()->attach($user);
|
|
|
|
// 返回 JSON 响应,表示已成功收藏
|
|
return response()->json([
|
|
'code' => 201,
|
|
'msg' => '收藏成功'
|
|
]);
|
|
}
|
|
}
|