success(['list' => $channels->list()]); } public function bots(TelegramChannelService $channels): JsonResponse { return $this->success(['list' => $channels->bots()]); } public function saveBot(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(fn () => $channels->saveBot($request->all())); } public function deleteBot(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(function () use ($request, $channels) { $channels->deleteBot($this->id($request)); return []; }); } public function detail(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(fn () => $channels->detail($this->id($request))); } public function save(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(fn () => $channels->save($request->all())); } public function setDefault(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(fn () => $channels->setDefault($this->id($request))); } public function delete(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(function () use ($request, $channels) { $channels->delete($this->id($request)); return []; }); } public function publish(Request $request, TelegramChannelService $channels): JsonResponse { return $this->respond(function () use ($request, $channels) { $data = $request->validate(['id' => 'required|integer|min:1', 'isTop' => 'sometimes|required|boolean']); return $channels->publish((int) $data['id'], (bool) ($data['isTop'] ?? false)); }); } private function id(Request $request): int { return (int) $request->validate(['id' => 'required|integer|min:1'])['id']; } private function respond(Closure $action): JsonResponse { try { return $this->success($action()); } catch (ValidationException $e) { return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first()); } } }