api.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?php
  2. use Illuminate\Http\Request;
  3. use Illuminate\Support\Facades\Route;
  4. use Illuminate\Support\Facades\App;
  5. use Illuminate\Support\Facades\Cache;
  6. use App\Http\Controllers\WbwTemplateController;
  7. use App\Http\Controllers\DhammaTermController;
  8. use App\Http\Controllers\SentenceController;
  9. use App\Http\Controllers\ProgressChapterController;
  10. use App\Http\Controllers\SentenceInfoController;
  11. use App\Http\Controllers\SentPrController;
  12. use App\Http\Controllers\TagController;
  13. use App\Http\Controllers\ViewController;
  14. use App\Http\Controllers\LikeController;
  15. use App\Http\Controllers\SentHistoryController;
  16. use App\Http\Controllers\PaliTextController;
  17. use App\Http\Controllers\ChannelController;
  18. use App\Http\Controllers\UserDictController;
  19. use App\Http\Controllers\CollectionController;
  20. use App\Http\Controllers\DictController;
  21. use App\Http\Controllers\AuthController;
  22. use App\Http\Controllers\ArticleController;
  23. use App\Http\Controllers\GroupController;
  24. use App\Http\Controllers\CorpusController;
  25. use App\Http\Controllers\ArticleProgressController;
  26. use App\Http\Controllers\ExportWbwController;
  27. use App\Http\Controllers\WbwLookupController;
  28. use App\Http\Controllers\UploadController;
  29. use App\Http\Controllers\DiscussionController;
  30. use App\Http\Controllers\UserController;
  31. use App\Http\Controllers\GroupMemberController;
  32. use App\Http\Controllers\ShareController;
  33. use App\Http\Controllers\CourseController;
  34. use App\Http\Controllers\CourseMemberController;
  35. use App\Http\Controllers\ExerciseController;
  36. use App\Http\Controllers\ArticleMapController;
  37. use App\Http\Controllers\VocabularyController;
  38. use App\Http\Controllers\CaseController;
  39. use App\Http\Controllers\DictMeaningController;
  40. use App\Http\Controllers\UserOperationDailyController;
  41. use App\Http\Controllers\UserStatisticController;
  42. use App\Http\Controllers\SentSimController;
  43. use App\Http\Controllers\NissayaEndingController;
  44. use App\Http\Controllers\RelationController;
  45. use App\Http\Controllers\TermVocabularyController;
  46. use App\Http\Controllers\RelatedParagraphController;
  47. use App\Http\Controllers\SearchController;
  48. use App\Http\Controllers\WordIndexController;
  49. use App\Http\Controllers\StudioController;
  50. use App\Http\Controllers\GrammarGuideController;
  51. use App\Http\Controllers\WbwController;
  52. use App\Http\Controllers\AttachmentController;
  53. use App\Http\Controllers\ApiController;
  54. use App\Http\Controllers\ProgressImgController;
  55. use App\Http\Controllers\RecentController;
  56. use App\Http\Controllers\MilestoneController;
  57. use App\Http\Controllers\ArticleNavController;
  58. use App\Http\Controllers\InviteController;
  59. use App\Http\Controllers\SignUpController;
  60. use App\Http\Controllers\TermSummaryController;
  61. use App\Http\Controllers\NissayaCardController;
  62. use App\Http\Controllers\SentInChannelController;
  63. use App\Http\Controllers\ChannelIOController;
  64. use App\Http\Controllers\ChapterIOController;
  65. use App\Http\Controllers\SentenceIOController;
  66. use App\Http\Controllers\WebHookController;
  67. use App\Http\Controllers\DictStatisticController;
  68. use App\Http\Controllers\SearchTitleController;
  69. use App\Http\Controllers\TransferController;
  70. use App\Http\Controllers\HealthCheckController;
  71. use App\Http\Controllers\OfflineIndexController;
  72. use App\Http\Controllers\TaskController;
  73. use App\Http\Controllers\ExportController;
  74. use App\Http\Controllers\DictVocabularyController;
  75. use App\Http\Controllers\DictInfoController;
  76. use App\Http\Controllers\PgPaliDictDownloadController;
  77. use App\Http\Controllers\SearchPaliDataController;
  78. use App\Http\Controllers\SearchPaliWbwController;
  79. use App\Http\Controllers\SearchPageNumberController;
  80. use App\Http\Controllers\NavPageController;
  81. use App\Http\Controllers\BookTitleController;
  82. use App\Http\Controllers\SystemTermController;
  83. use App\Http\Controllers\TermExportController;
  84. use App\Http\Controllers\NavArticleController;
  85. use App\Http\Controllers\NavCSParaController;
  86. use App\Http\Controllers\SentencesInChapterController;
  87. use App\Http\Controllers\CompoundController;
  88. use App\Http\Controllers\NotificationController;
  89. use App\Http\Controllers\InteractiveController;
  90. use App\Http\Controllers\ChapterIndexController;
  91. use App\Http\Controllers\WbwSentenceController;
  92. use App\Http\Controllers\SnowFlakeIdController;
  93. use App\Http\Controllers\ForgotPasswordController;
  94. use App\Http\Controllers\ResetPasswordController;
  95. use App\Http\Controllers\DiscussionCountController;
  96. use App\Http\Controllers\TagsInChapterCountController;
  97. use App\Http\Controllers\TagMapController;
  98. use App\Http\Controllers\EditableSentenceController;
  99. use App\Http\Controllers\ArticleFtsController;
  100. use App\Http\Controllers\NissayaCoverController;
  101. use App\Http\Controllers\AiTranslateController;
  102. use App\Http\Controllers\DictPreferenceController;
  103. use App\Http\Controllers\CommandController;
  104. use App\Http\Controllers\UserMilestoneController;
  105. use App\Http\Controllers\ProjectController;
  106. use App\Http\Controllers\TaskStatusController;
  107. use App\Http\Controllers\TaskGroupController;
  108. use App\Http\Controllers\ChapterController;
  109. use App\Http\Controllers\ProjectTreeController;
  110. use App\Http\Controllers\SiteInfoController;
  111. use App\Http\Controllers\PaliBookCategoryController;
  112. /*
  113. |--------------------------------------------------------------------------
  114. | API Routes
  115. |--------------------------------------------------------------------------
  116. |
  117. | Here is where you can register API routes for your application. These
  118. | routes are loaded by the RouteServiceProvider within a group which
  119. | is assigned the "api" middleware group. Enjoy building your API!
  120. |
  121. */
  122. Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
  123. return $request->user();
  124. });
  125. Route::group(['prefix' => 'v2'], function () {
  126. Route::apiResource('wbw_templates', WbwTemplateController::class);
  127. Route::apiResource('terms', DhammaTermController::class);
  128. Route::apiResource('terms-export', TermExportController::class);
  129. Route::get('terms-import', [TermExportController::class, 'import']);
  130. Route::get('system-term/{lang}/{word}', [SystemTermController::class, "show"]);
  131. Route::apiResource('sentence', SentenceController::class);
  132. Route::apiResource('sent-in-channel', SentInChannelController::class);
  133. Route::apiResource('sentpr', SentPrController::class);
  134. Route::post('sent-pr-tree', [SentPrController::class, "pr_tree"]);
  135. Route::apiResource('progress', ProgressChapterController::class);
  136. Route::apiResource('tag', TagController::class);
  137. Route::apiResource('view', ViewController::class);
  138. Route::delete('like', [LikeController::class, 'delete']);
  139. Route::apiResource('like', LikeController::class);
  140. Route::apiResource('sent_history', SentHistoryController::class);
  141. Route::get('sent_history_contribution', [SentHistoryController::class, 'contribution']);
  142. Route::apiResource('palitext', PaliTextController::class);
  143. Route::apiResource('channel', ChannelController::class);
  144. Route::patch('channel', [ChannelController::class, "patch"]);
  145. Route::get('channel-name/{name}', [ChannelController::class, "showByName"]);
  146. Route::get('channel-my-number', [ChannelController::class, 'showMyNumber']);
  147. Route::post('channel-progress', [ChannelController::class, "progress"]);
  148. Route::delete('userdict', [UserDictController::class, 'delete']);
  149. Route::apiResource('userdict', UserDictController::class);
  150. Route::apiResource('anthology', CollectionController::class);
  151. Route::get('anthology-my-number', [CollectionController::class, 'showMyNumber']);
  152. Route::apiResource('dict', DictController::class);
  153. Route::apiResource('article', ArticleController::class);
  154. Route::get('article-my-number', [ArticleController::class, 'showMyNumber']);
  155. Route::put('article-preview/{id}', [ArticleController::class, 'preview']);
  156. Route::apiResource('group', GroupController::class);
  157. Route::get('group-my-number', [GroupController::class, 'showMyNumber']);
  158. Route::get('auth/current', [AuthController::class, 'getUserInfoByToken']);
  159. Route::post('sign-in', [AuthController::class, 'signIn']);
  160. Route::apiResource('auth/forgot-password', ForgotPasswordController::class);
  161. Route::apiResource('auth/reset-password', ResetPasswordController::class);
  162. Route::apiResource('corpus', CorpusController::class);
  163. Route::get('corpus-sent/{id}', [CorpusController::class, 'showSent']);
  164. Route::get('corpus-chapter/{id}', [CorpusController::class, 'showChapter']);
  165. Route::get('corpus-sentences/{type}/{id}', [CorpusController::class, 'showSentences']);
  166. Route::apiResource('article-progress', ArticleProgressController::class);
  167. Route::post('export_wbw', [ExportWbwController::class, 'index']);
  168. Route::apiResource('attachments', UploadController::class);
  169. Route::apiResource('discussion', DiscussionController::class);
  170. Route::post('sent-discussion-tree', [DiscussionController::class, "discussion_tree"]);
  171. Route::get('discussion-anchor/{id}', [DiscussionController::class, 'anchor']);
  172. Route::apiResource('user', UserController::class);
  173. Route::apiResource('group-member', GroupMemberController::class);
  174. Route::apiResource('share', ShareController::class);
  175. Route::apiResource('wbwlookup', WbwLookupController::class);
  176. Route::apiResource('course', CourseController::class);
  177. Route::apiResource('course-member', CourseMemberController::class);
  178. Route::put('course-member_set-channel', [CourseMemberController::class, 'set_channel']);
  179. Route::get('course-my-course', [CourseController::class, 'showMyCourseNumber']);
  180. Route::get('course-curr', [CourseMemberController::class, 'curr']);
  181. Route::get('course-member-export', [CourseMemberController::class, "export"]);
  182. Route::apiResource('exercise', ExerciseController::class);
  183. Route::apiResource('article-map', ArticleMapController::class);
  184. Route::apiResource('vocabulary', VocabularyController::class);
  185. Route::apiResource('case', CaseController::class);
  186. Route::apiResource('dict-meaning', DictMeaningController::class);
  187. Route::apiResource('user-operation-daily', UserOperationDailyController::class);
  188. Route::apiResource('user-statistic', UserStatisticController::class);
  189. Route::apiResource('sent-sim', SentSimController::class);
  190. Route::apiResource('nissaya-ending', NissayaEndingController::class);
  191. Route::get('nissaya-ending-card', [NissayaEndingController::class, "nissaya_card"]);
  192. Route::get('nissaya-ending-export', [NissayaEndingController::class, "export"]);
  193. Route::get('nissaya-ending-import', [NissayaEndingController::class, "import"]);
  194. Route::get('nissaya-ending-vocabulary', [NissayaEndingController::class, "vocabulary"]);
  195. Route::apiResource('nissaya-card', NissayaCardController::class);
  196. Route::apiResource('relation', RelationController::class);
  197. Route::get('relation-export', [RelationController::class, "export"]);
  198. Route::get('relation-import', [RelationController::class, "import"]);
  199. Route::apiResource('term-vocabulary', TermVocabularyController::class);
  200. Route::apiResource('related-paragraph', RelatedParagraphController::class);
  201. Route::apiResource('search', SearchController::class);
  202. Route::get('search-book-list', [SearchController::class, 'book_list']);
  203. Route::apiResource('pali-word-index', WordIndexController::class);
  204. Route::apiResource('studio', StudioController::class);
  205. Route::apiResource('grammar-guide', GrammarGuideController::class);
  206. Route::apiResource('wbw', WbwController::class);
  207. Route::apiResource('attachment', AttachmentController::class);
  208. Route::apiResource('api', ApiController::class);
  209. Route::apiResource('progress-img', ProgressImgController::class);
  210. Route::apiResource('recent', RecentController::class);
  211. Route::apiResource('milestone', MilestoneController::class);
  212. Route::apiResource('article-nav', ArticleNavController::class);
  213. Route::apiResource('invite', InviteController::class);
  214. Route::apiResource('sign-up', SignUpController::class);
  215. Route::apiResource('term-summary', TermSummaryController::class);
  216. Route::apiResource('channel-io', ChannelIOController::class);
  217. Route::apiResource('chapter-io', ChapterIOController::class);
  218. Route::apiResource('sentence-io', SentenceIOController::class);
  219. Route::apiResource('webhook', WebHookController::class);
  220. Route::apiResource('dict-statistic', DictStatisticController::class);
  221. Route::apiResource('search-title-index', SearchTitleController::class);
  222. Route::apiResource('transfer', TransferController::class);
  223. Route::apiResource('health-check', HealthCheckController::class);
  224. Route::apiResource('offline-index', OfflineIndexController::class);
  225. Route::apiResource('task', TaskController::class);
  226. Route::apiResource('export', ExportController::class);
  227. Route::apiResource('dict-vocabulary', DictVocabularyController::class);
  228. Route::apiResource('dict-info', DictInfoController::class);
  229. Route::apiResource('pg-pali-dict-download', PgPaliDictDownloadController::class);
  230. Route::apiResource('pali-search-data', SearchPaliDataController::class);
  231. Route::apiResource('search-pali-wbw', SearchPaliWbwController::class);
  232. Route::get('search-pali-wbw-books', [SearchPaliWbwController::class, 'book_list']);
  233. Route::apiResource('search-page-number', SearchPageNumberController::class);
  234. Route::apiResource('nav-page', NavPageController::class);
  235. Route::apiResource('nav-article', NavArticleController::class);
  236. Route::apiResource('nav-cs-para', NavCSParaController::class);
  237. Route::apiResource('book-title', BookTitleController::class);
  238. Route::apiResource('sentences-in-chapter', SentencesInChapterController::class);
  239. Route::apiResource('compound', CompoundController::class);
  240. Route::apiResource('notification', NotificationController::class);
  241. Route::apiResource('interactive', InteractiveController::class);
  242. Route::apiResource('chapter-index', ChapterIndexController::class);
  243. Route::apiResource('wbw-sentence', WbwSentenceController::class);
  244. Route::apiResource('snowflake', SnowFlakeIdController::class);
  245. Route::apiResource('discussion-count', DiscussionCountController::class);
  246. Route::apiResource('tags-in-chapter', TagsInChapterCountController::class);
  247. Route::apiResource('tag-map', TagMapController::class);
  248. Route::apiResource('editable-sentence', EditableSentenceController::class);
  249. Route::apiResource('article-fts', ArticleFtsController::class);
  250. Route::apiResource('nissaya-cover', NissayaCoverController::class);
  251. Route::apiResource('ai-translate', AiTranslateController::class);
  252. Route::apiResource('dict-preference', DictPreferenceController::class);
  253. Route::apiResource('command', CommandController::class);
  254. Route::apiResource('user-milestone', UserMilestoneController::class);
  255. Route::apiResource('project', ProjectController::class);
  256. Route::apiResource('task-status', TaskStatusController::class);
  257. Route::apiResource('task-group', TaskGroupController::class);
  258. Route::apiResource('chapter', ChapterController::class);
  259. Route::apiResource('project-tree', ProjectTreeController::class);
  260. Route::apiResource('site-info', SiteInfoController::class);
  261. Route::apiResource('pali-book-category', PaliBookCategoryController::class);
  262. Route::get('download/{type1}/{type2}/{uuid}/{filename}', function ($type1, $type2, $uuid, $filename) {
  263. header("Content-Type: {$type1}/{$type1}");
  264. header("Content-Disposition: attachment; filename=\"{$filename}\"");
  265. $content = Cache::get("download/tmp/{$uuid}");
  266. //TODO 换成redis 集群
  267. file_put_contents("php://output", $content);
  268. });
  269. Route::get('palibook/{file}', function ($file) {
  270. if ($file === 'default') {
  271. $file = "defualt";
  272. }
  273. return file_get_contents(public_path("app/palicanon/category/{$file}.json"));
  274. });
  275. Route::get('guide/{lang}/{file}', function ($lang, $file) {
  276. $filename = public_path("app/users_guide/{$lang}/{$file}.md");
  277. if (file_exists($filename)) {
  278. return json_encode(['ok' => true, 'message' => '', 'data' => file_get_contents($filename)]);
  279. } else {
  280. return json_encode(['ok' => false, 'message' => "no file {$lang}/{$file}"]);
  281. }
  282. });
  283. });