DiscussionBatchCountController.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. namespace App\Http\Controllers\V3;
  3. use App\Http\Controllers\Concerns\ResolvesCurrentUser;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Requests\V3\BatchCountDiscussionRequest;
  6. use App\Http\Resources\V3\DiscussionCountResource;
  7. use App\Services\V3\DiscussionService;
  8. /**
  9. * 一批对象的讨论角标。
  10. *
  11. * 取代 `POST /v2/discussion-count` 的讨论部分(`discussions`);那个端点同时返回标签,
  12. * 标签部分还没迁,v6 暂时仍调它取 `tags`。v2 那份在 dashboard-v4 下线前原样保留。
  13. */
  14. class DiscussionBatchCountController extends Controller
  15. {
  16. use ResolvesCurrentUser;
  17. public function __construct(private readonly DiscussionService $discussions) {}
  18. /**
  19. * 批量取讨论角标
  20. *
  21. * 每个对象返回未关闭的评论线程数(total)与其中当前用户发起的数目(mine,未登录为 0),
  22. * 按请求顺序、一个不少(没有讨论的为 0)。只数评论线程(discussion / qa / help / issue),
  23. * 批注与已删除的不算;可见性与列表相同:未登录不数协作类话题,basic 角色在无权管理的
  24. * 对象上只数自己发起的协作类话题。最多 500 个对象。
  25. *
  26. * 与 v2 的区别:入参是对象 uid 而不是句子坐标;只给计数不给明细;v2 不分类型、不管可见性。
  27. *
  28. * @unauthenticated
  29. *
  30. * @bodyParam targets array required 讨论对象列表,每项 {type, id},最多 500 个
  31. * @bodyParam targets.*.type string required 对象类型。Enum: sentence,wbw
  32. * @bodyParam targets.*.id string required 对象 uid
  33. */
  34. public function __invoke(BatchCountDiscussionRequest $request)
  35. {
  36. return DiscussionCountResource::collection($this->discussions->batchCount(
  37. $request->validated('targets'),
  38. $this->currentUserUid($request),
  39. ));
  40. }
  41. }