TipitakaChapterChannelController.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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\IndexTipitakaChapterChannelRequest;
  6. use App\Http\Resources\V3\TipitakaChapterChannelResource;
  7. use App\Services\V3\TipitakaChapterChannelService;
  8. /**
  9. * 某一章有哪些 channel 及各自的完成度——阅读页的「版本切换」用。
  10. *
  11. * 取代 `GET /v2/progress?view=chapter_channels&book=&par=`(`ProgressChapterController@index`
  12. * 的一个 view 分支)。v2 那份在 dashboard-v4 下线前原样保留,不要改动。
  13. */
  14. class TipitakaChapterChannelController extends Controller
  15. {
  16. use ResolvesCurrentUser;
  17. public function __construct(private readonly TipitakaChapterChannelService $chapterChannels) {}
  18. /**
  19. * 列出一章的 channel
  20. *
  21. * 按完成度从高到低。只列看得见的 channel:公开的,加上登录用户自己的、共享给他(或他所在群组)的;
  22. * 未登录只看得到公开的。章节不存在或没有任何 channel 时返回空列表。
  23. *
  24. * `progress` 是 0–1 的完成度;`progress_line` 是近几周每周的修改次数(从早到晚,由 `upgrade:chapter.dynamic.weekly` 每周算一次,
  25. * 没算过就是 null),画活跃度小图用;
  26. * `views` 是这一章在该 channel 下被浏览的次数。
  27. *
  28. * @unauthenticated
  29. *
  30. * @urlParam book integer required 书号。Example: 94
  31. * @urlParam para integer required 章节起始段落号。Example: 385
  32. *
  33. * @queryParam page integer 页码。Default: 1
  34. * @queryParam per_page integer 每页数量,最大 200。Default: 100
  35. */
  36. public function __invoke(IndexTipitakaChapterChannelRequest $request, int $book, int $para)
  37. {
  38. return TipitakaChapterChannelResource::collection($this->chapterChannels->list(
  39. $book,
  40. $para,
  41. $this->currentUserUid($request),
  42. $request->integer('per_page', 100),
  43. ));
  44. }
  45. }