interaction.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /*
  3. |--------------------------------------------------------------------------
  4. | v3 · interaction —— 用户对内容的互动
  5. |--------------------------------------------------------------------------
  6. |
  7. | 由 routes/api.php 的 v3 组 require 进来,前缀已在那边加好。
  8. |
  9. | 将来 notification、tag 也落在这个文件。
  10. |
  11. */
  12. use App\Http\Controllers\V3\DiscussionBatchCountController;
  13. use App\Http\Controllers\V3\DiscussionController;
  14. use App\Http\Controllers\V3\DiscussionReplyController;
  15. use App\Http\Controllers\V3\DiscussionSummaryController;
  16. use App\Http\Controllers\V3\MeReactionController;
  17. use App\Http\Controllers\V3\ReactionController;
  18. use App\Http\Controllers\V3\ReactionTallyController;
  19. use Illuminate\Support\Facades\Route;
  20. // reactions(点赞/收藏/书签/关注/下载记录)。资源改名是 CLAUDE.md
  21. // 「已登记的改名例外」里的唯一一条,底层仍是 v2 的 likes 表。
  22. // tally 要注册在 apiResource 之前:将来给 reactions 补上 show 之后,
  23. // {reaction} 会把 tally 当成 uid 吃掉
  24. Route::get('reactions/tally', [ReactionTallyController::class, 'index']);
  25. // 公共只读:某个 target 下的 reactions
  26. Route::apiResource('reactions', ReactionController::class)->only(['index']);
  27. // 当前用户自己的 reactions:全线登录,由 auth.v3 中间件在进控制器前挡掉
  28. Route::prefix('me')->as('me.')->middleware('auth.v3')->group(function () {
  29. Route::apiResource('reactions', MeReactionController::class)->only(['index', 'store', 'destroy']);
  30. });
  31. // discussions(评论线程:话题 + 一层回复)。批注(note / commentary)同表但不归这里管。
  32. // summary 要注册在 apiResource 之前,否则 {discussion} 会把它当成 uuid 吃掉
  33. Route::get('discussions/summary', DiscussionSummaryController::class);
  34. // 一批对象(句子 / 逐词)的讨论角标。POST:一页几百个 uid 放不进查询串
  35. Route::post('discussions/batch-count', DiscussionBatchCountController::class);
  36. // 读公开(可选登录),写要登录。show 与回复列表要能读到墓碑(软删了但还挂着回复的话题)。
  37. // 只注册 PATCH,不注册 PUT:v3 的更新只做局部更新(v3-resource skill 硬规范第 10 条)
  38. Route::apiResource('discussions', DiscussionController::class)
  39. ->except(['update'])
  40. ->middlewareFor(['store', 'destroy'], 'auth.v3')
  41. ->withTrashed(['show'])
  42. ->whereUuid('discussion');
  43. Route::patch('discussions/{discussion}', [DiscussionController::class, 'update'])
  44. ->middleware('auth.v3')
  45. ->whereUuid('discussion');
  46. Route::get('discussions/{discussion}/replies', [DiscussionReplyController::class, 'index'])
  47. ->withTrashed()
  48. ->whereUuid('discussion');
  49. Route::post('discussions/{discussion}/replies', [DiscussionReplyController::class, 'store'])
  50. ->middleware('auth.v3')
  51. ->whereUuid('discussion');