TelegramChannel.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Constants\HttpStatus;
  4. use App\Http\Controllers\Controller;
  5. use App\Services\TelegramChannelService;
  6. use App\Services\TelegramChannelMessageService;
  7. use Closure;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Validation\ValidationException;
  11. class TelegramChannel extends Controller
  12. {
  13. public function index(TelegramChannelService $channels): JsonResponse
  14. {
  15. return $this->success(['list' => $channels->list()]);
  16. }
  17. public function messages(Request $request, TelegramChannelMessageService $messages): JsonResponse
  18. {
  19. return $this->respond(function () use ($request, $messages) {
  20. $data = $request->validate(['page' => 'sometimes|required|integer|min:1']);
  21. return $messages->list((int) ($data['page'] ?? 1));
  22. });
  23. }
  24. public function createMessage(Request $request, TelegramChannelMessageService $messages): JsonResponse
  25. {
  26. return $this->respond(fn () => $messages->create($request->all()));
  27. }
  28. public function cancelMessage(Request $request, TelegramChannelMessageService $messages): JsonResponse
  29. {
  30. return $this->respond(function () use ($request, $messages) {
  31. $messages->cancel($this->id($request));
  32. return [];
  33. });
  34. }
  35. public function bots(TelegramChannelService $channels): JsonResponse
  36. {
  37. return $this->success(['list' => $channels->bots()]);
  38. }
  39. public function saveBot(Request $request, TelegramChannelService $channels): JsonResponse
  40. {
  41. return $this->respond(fn () => $channels->saveBot($request->all()));
  42. }
  43. public function deleteBot(Request $request, TelegramChannelService $channels): JsonResponse
  44. {
  45. return $this->respond(function () use ($request, $channels) {
  46. $channels->deleteBot($this->id($request));
  47. return [];
  48. });
  49. }
  50. public function privateMenu(Request $request, TelegramChannelService $channels): JsonResponse
  51. {
  52. return $this->respond(fn () => $channels->privateMenu($this->id($request), $this->menuLanguage($request)));
  53. }
  54. public function savePrivateMenu(Request $request, TelegramChannelService $channels): JsonResponse
  55. {
  56. return $this->respond(fn () => $channels->savePrivateMenu($this->id($request), $this->menuLanguage($request), $request->all()));
  57. }
  58. public function registerPrivateWebhook(Request $request, TelegramChannelService $channels): JsonResponse
  59. {
  60. return $this->respond(fn () => $channels->registerPrivateWebhook($this->id($request)));
  61. }
  62. private function menuLanguage(Request $request): string
  63. {
  64. return $request->validate(['language' => 'required|in:zh,en,vi'])['language'];
  65. }
  66. public function detail(Request $request, TelegramChannelService $channels): JsonResponse
  67. {
  68. return $this->respond(fn () => $channels->detail($this->id($request)));
  69. }
  70. public function save(Request $request, TelegramChannelService $channels): JsonResponse
  71. {
  72. return $this->respond(fn () => $channels->save($request->all()));
  73. }
  74. public function setDefault(Request $request, TelegramChannelService $channels): JsonResponse
  75. {
  76. return $this->respond(fn () => $channels->setDefault($this->id($request)));
  77. }
  78. public function delete(Request $request, TelegramChannelService $channels): JsonResponse
  79. {
  80. return $this->respond(function () use ($request, $channels) {
  81. $channels->delete($this->id($request));
  82. return [];
  83. });
  84. }
  85. public function publish(Request $request, TelegramChannelService $channels): JsonResponse
  86. {
  87. return $this->respond(function () use ($request, $channels) {
  88. $data = $request->validate(['id' => 'required|integer|min:1', 'isTop' => 'sometimes|required|boolean']);
  89. return $channels->publish((int) $data['id'], (bool) ($data['isTop'] ?? false));
  90. });
  91. }
  92. private function id(Request $request): int
  93. {
  94. return (int) $request->validate(['id' => 'required|integer|min:1'])['id'];
  95. }
  96. private function respond(Closure $action): JsonResponse
  97. {
  98. try {
  99. return $this->success($action());
  100. } catch (ValidationException $e) {
  101. return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
  102. }
  103. }
  104. }