ReactionController.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace App\Http\Controllers\V3;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\V3\IndexReactionRequest;
  5. use App\Http\Resources\V3\ReactionResource;
  6. use App\Services\V3\ReactionService;
  7. /**
  8. * 某个 target 下的 reactions(点赞/收藏/书签/关注/下载记录)——公共只读。
  9. *
  10. * 取代 `GET /v2/like?view=target`。与 `/v3/me/reactions`(当前用户自己的 reactions)
  11. * 分属两个控制器:那边全线要求登录,这边全线公开。
  12. *
  13. * 资源改名(v2 的 `like` → v3 的 `reactions`)是根目录 CLAUDE.md
  14. * 「已登记的改名例外」里的唯一一条,底层仍是 `likes` 表。
  15. */
  16. class ReactionController extends Controller
  17. {
  18. public function __construct(private readonly ReactionService $reactions) {}
  19. /**
  20. * 列出某个 target 下的 reactions
  21. *
  22. * 按 target 聚合的公共列表,不要求登录。分页由 Laravel paginator 提供。
  23. *
  24. * @unauthenticated
  25. *
  26. * @queryParam target_id string required target 的 uuid。Example: 5b4511c1-c99f-47e7-9798-97b9e5229e18
  27. * @queryParam type string 操作类型。Enum: like,dislike,favorite,watch,bookmark,download
  28. * @queryParam page integer 页码。Default: 1
  29. * @queryParam per_page integer 每页数量,最大 200。Default: 15
  30. */
  31. public function index(IndexReactionRequest $request)
  32. {
  33. $data = $request->validated();
  34. return ReactionResource::collection($this->reactions->listForTarget(
  35. $data['target_id'],
  36. $data['type'] ?? null,
  37. $request->integer('per_page', 15),
  38. ));
  39. }
  40. }