From 5c4554b9f9c56645aefcb9763aac3ab8569070ca Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Sat, 19 Jul 2025 21:20:30 +0800 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=BE=D1=83=D1=82=D1=8B=20/api/=20=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BE=D1=87=D0=B8=20=D0=BF=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BB=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controllers/ApiController.php | 44 ++++++++++++++++------------- app/Controllers/BasicController.php | 2 +- app/Controllers/WebController.php | 15 ---------- app/Core/IniFile.php | 6 +++- config/routes.php | 9 +++--- views/details.twig | 2 +- 6 files changed, 36 insertions(+), 42 deletions(-) diff --git a/app/Controllers/ApiController.php b/app/Controllers/ApiController.php index dfc274a..ab4dd7c 100644 --- a/app/Controllers/ApiController.php +++ b/app/Controllers/ApiController.php @@ -21,6 +21,30 @@ use Psr\Http\Message\ServerRequestInterface; */ class ApiController extends BasicController { + /** + * Возвращает информацию о плейлисте + * + * @param ServerRequestInterface $request + * @param ResponseInterface $response + * @return ResponseInterface + * @throws Exception + */ + public function getOne(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + try { + $code = $request->getAttributes()['code'] ?? null; + empty($code) && throw new PlaylistNotFoundException(''); + + $playlist = ini()->getPlaylist($code); + if ($playlist['isOnline'] === true) { + unset($playlist['content']); + } + return $this->responseJson($response, 200, $playlist); + } catch (PlaylistNotFoundException $e) { + return $this->responseJsonError($response, 404, $e); + } + } + /** * Возвращает информацию о каналов плейлиста * @@ -56,24 +80,4 @@ class ApiController extends BasicController return $response->withStatus(200) ->withHeader('Content-Type', $mime); } - - /** - * Возвращает информацию о плейлисте - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * @throws Exception - */ - public function json(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface - { - $code = $request->getAttributes()['code']; - - try { - $playlist = ini()->getPlaylist($code); - return $this->responseJson($response, 200, $playlist); - } catch (PlaylistNotFoundException $e) { - return $this->responseJsonError($response, 404, $e); - } - } } diff --git a/app/Controllers/BasicController.php b/app/Controllers/BasicController.php index c5feb2f..4f422fe 100644 --- a/app/Controllers/BasicController.php +++ b/app/Controllers/BasicController.php @@ -34,7 +34,7 @@ class BasicController */ public function notFound(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { - $code = $request->getAttributes()['code']; + $code = $request->getAttributes()['code'] ?? ''; $response->withStatus(404); $this->view($request, $response, 'notfound.twig', ['code' => $code]); diff --git a/app/Controllers/WebController.php b/app/Controllers/WebController.php index c2b6622..0d2a956 100644 --- a/app/Controllers/WebController.php +++ b/app/Controllers/WebController.php @@ -63,21 +63,6 @@ class WebController extends BasicController ]); } - /** - * Возвращает страницу FAQ - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * @throws LoaderError - * @throws RuntimeError - * @throws SyntaxError - */ - public function faq(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface - { - return $this->view($request, $response, 'faq.twig'); - } - /** * Переадресует запрос на прямую ссылку плейлиста * diff --git a/app/Core/IniFile.php b/app/Core/IniFile.php index fa3bb27..0ac4cba 100644 --- a/app/Core/IniFile.php +++ b/app/Core/IniFile.php @@ -41,7 +41,11 @@ class IniFile // сохраняем порядок foreach (array_keys($ini) as $code) { - $data = redis()->get($code); + try { + $data = @redis()->get($code); + } catch (Throwable) { + $data = false; + } if ($data === false) { $raw = $ini[$code]; $data = [ diff --git a/config/routes.php b/config/routes.php index 59c3eea..f47be9b 100644 --- a/config/routes.php +++ b/config/routes.php @@ -6,6 +6,7 @@ */ use App\Controllers\ApiController; +use App\Controllers\BasicController; use App\Controllers\BotController; use App\Controllers\WebController; @@ -56,13 +57,13 @@ return [ [ 'method' => 'GET', - 'path' => '/{code:[0-9a-zA-Z]+}/json', - 'handler' => [ApiController::class, 'json'], - 'name' => 'json', + 'path' => '/api/playlists/{code:[0-9a-zA-Z]+}', + 'handler' => [ApiController::class, 'getOne'], + 'name' => 'api::getOne', ], [ 'method' => 'GET', - 'path' => '/{code:[0-9a-zA-Z]+}/qrcode', + 'path' => '/api/playlists/{code:[0-9a-zA-Z]+}/qrcode', 'handler' => [ApiController::class, 'makeQrCode'], 'name' => 'api::makeQrCode', ], diff --git a/views/details.twig b/views/details.twig index 2d79ead..db2f530 100644 --- a/views/details.twig +++ b/views/details.twig @@ -175,7 +175,7 @@