SiteMessage.php 1.8 KB

1234567891011121314151617181920212223242526272829
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Services\SiteMessageService;
  5. use Illuminate\Auth\Access\AuthorizationException;
  6. use Illuminate\Support\Facades\Log;
  7. use Illuminate\Validation\ValidationException;
  8. class SiteMessage extends Controller
  9. {
  10. public function index(SiteMessageService $service) { return $this->run(fn () => $service->listing(request()->all())); }
  11. public function options(SiteMessageService $service) { return $this->run(fn () => $service->options()); }
  12. public function users(SiteMessageService $service) { return $this->run(fn () => $service->recipients('user', request()->all())); }
  13. public function agents(SiteMessageService $service) { return $this->run(fn () => $service->recipients('agent', request()->all())); }
  14. public function send(SiteMessageService $service) { return $this->run(fn () => $service->send(request()->all())); }
  15. public function detail(SiteMessageService $service) { return $this->run(fn () => $service->detail($this->id())); }
  16. public function delete(SiteMessageService $service) { return $this->run(fn () => $service->retract($this->id())); }
  17. public function logs(SiteMessageService $service) { return $this->run(fn () => $service->logs(request()->all())); }
  18. private function id(): int { return (int) request()->validate(['id' => ['required', 'integer', 'min:1']])['id']; }
  19. private function run(callable $callback)
  20. {
  21. try { return $this->success($callback()); }
  22. catch (ValidationException $e) { return $this->error(-3, $e->validator->errors()->first()); }
  23. catch (AuthorizationException $e) { return $this->error(-1, $e->getMessage()); }
  24. catch (\Throwable $e) { Log::error('site_message_admin_failed', ['exception' => $e]); return $this->error(-3, '信息服务暂不可用,请稍后重试'); }
  25. }
  26. }