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.
aquaculture/app/Http/Controllers/User/LikesController.php

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' => '收藏成功'
]);
}
}