TipitakaRelatedParagraphAggregateController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Http\Controllers\V3;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\V3\AggregateTipitakaRelatedParagraphBookNameRequest;
  5. use App\Http\Requests\V3\AggregateTipitakaRelatedParagraphRequest;
  6. use App\Http\Resources\V3\RelatedParagraphBookNameResource;
  7. use App\Http\Resources\V3\RelatedParagraphCsParaResource;
  8. use App\Services\V3\TipitakaRelatedParagraphService;
  9. /**
  10. * 段落关联关系的聚合端点。
  11. *
  12. * - `GET /v3/tipitaka-related-paragraphs/aggregate` → 所有 SC 缩写
  13. * - `GET /v3/tipitaka-related-paragraphs/aggregate/{book_name}` → 该缩写下的 cs_para
  14. *
  15. * 聚合逻辑在 {@see TipitakaRelatedParagraphService},这里用 Resource 包成
  16. * 标准的 {data, meta} 信封(分页 meta 由 BaseResourceCollection 裁掉绝对 URL)。
  17. */
  18. class TipitakaRelatedParagraphAggregateController extends Controller
  19. {
  20. public function __construct(private readonly TipitakaRelatedParagraphService $related) {}
  21. /**
  22. * 列出所有 SC 缩写
  23. *
  24. * data 是去空、去重的 SC 缩写,每条形如 {book_name},分页由 Laravel paginator 提供。
  25. *
  26. * @unauthenticated
  27. *
  28. * @queryParam file integer 典籍文件号过滤(对应表里的 book 列)。
  29. * @queryParam book integer 真书号过滤(对应表里的 book_id 列)。
  30. * @queryParam page integer 页码。Default: 1
  31. * @queryParam per_page integer 每页数量,最大 200。Default: 15
  32. */
  33. public function index(AggregateTipitakaRelatedParagraphRequest $request)
  34. {
  35. return RelatedParagraphBookNameResource::collection(
  36. $this->related->bookNames($request->validated())
  37. );
  38. }
  39. /**
  40. * 列出某个 SC 缩写下的 cs_para
  41. *
  42. * data 是去重、>0 的 cs_para(升序),每条形如 {cs_para},分页由 Laravel paginator 提供。
  43. *
  44. * @unauthenticated
  45. *
  46. * @urlParam book_name string required SC 风格书名缩写(如 dn1、an2)。Example: dn1
  47. *
  48. * @queryParam file integer 典籍文件号过滤(对应表里的 book 列)。
  49. * @queryParam book integer 真书号过滤(对应表里的 book_id 列)。
  50. * @queryParam page integer 页码。Default: 1
  51. * @queryParam per_page integer 每页数量,最大 200。Default: 15
  52. */
  53. public function show(AggregateTipitakaRelatedParagraphBookNameRequest $request, string $bookName)
  54. {
  55. return RelatedParagraphCsParaResource::collection(
  56. $this->related->csParas($bookName, $request->validated())
  57. );
  58. }
  59. }