tipitaka.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. /*
  3. |--------------------------------------------------------------------------
  4. | v3 · tipitaka —— 三藏相关的功能块
  5. |--------------------------------------------------------------------------
  6. |
  7. | 由 routes/api.php 的 v3 组 require 进来,前缀已在那边加好。
  8. |
  9. | **路径开头是「领域-功能」,不是资源坐标。** `channel + book + para` 在 wikipali
  10. | 里是通用坐标(sentences / wbw / 批注 / 进度全都用它),放在路径开头会让每个新
  11. | 能力来抢同一个前缀,而且看不出这条 API 干什么。所以是
  12. | `/v3/tipitaka-reading/{channel}?book=&para=`,不是 `/v3/channels/{c}/books/{b}/…`。
  13. |
  14. | 路由判据(见根目录 CLAUDE.md):
  15. | - 必填参数进路径,可选参数留查询串
  16. | - 路径变量最多两个,能做到一个最好;多出来的想办法降成 filter
  17. |
  18. */
  19. use App\Http\Controllers\V3\TipitakaDiscussionController;
  20. use App\Http\Controllers\V3\TipitakaReadingController;
  21. use App\Http\Controllers\V3\TipitakaRelatedParagraphAggregateController;
  22. use App\Http\Controllers\V3\TipitakaRelatedParagraphController;
  23. use Illuminate\Support\Facades\Route;
  24. // 只有 channel 必填,所以路径上只有它一个变量;book / chapter / para 全是 filter。
  25. // 不带任何查询串 = 取这个 channel 的全部译文,下载场景要的就是这个。
  26. Route::get('tipitaka-reading/{channel}', TipitakaReadingController::class)
  27. ->whereUuid('channel');
  28. // 一段经文里的讨论:同样只有 channel 必填;book / chapter / para / to 与 type 等都是 filter。
  29. // 与 /v3/discussions(按单个对象查)必填参数不同,是另一个契约。
  30. Route::get('tipitaka-discussions/{channel}', TipitakaDiscussionController::class)
  31. ->whereUuid('channel');
  32. // 段落关联关系:查询(原 v2 related-paragraph)+ 聚合(book_name 列表 / 某 book_name 的 cs_para)。
  33. Route::get('tipitaka-related-paragraphs/aggregate', [TipitakaRelatedParagraphAggregateController::class, 'index'])
  34. ->name('tipitaka-related-paragraphs.aggregate');
  35. Route::get('tipitaka-related-paragraphs/aggregate/{book_name}', [TipitakaRelatedParagraphAggregateController::class, 'show'])
  36. ->name('tipitaka-related-paragraphs.aggregate.show');
  37. Route::get('tipitaka-related-paragraphs', [TipitakaRelatedParagraphController::class, 'index'])
  38. ->name('tipitaka-related-paragraphs.index');