From eec7926703861b8ce6de95f7d3d90c55a7a485fc Mon Sep 17 00:00:00 2001 From: Angela Livia Arumsari <16521177@mahasiswa.itb.ac.id> Date: Tue, 14 Nov 2023 00:45:33 +0700 Subject: [PATCH] feat: add endpoint to get image file --- src/App.php | 1 + src/controllers/FilmController.php | 26 ++++++++++++++++++++++++-- src/services/FilmService.php | 15 +++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/App.php b/src/App.php index 6a15a0f..57bdf84 100644 --- a/src/App.php +++ b/src/App.php @@ -41,6 +41,7 @@ class App $this->router->addRoute('/films', FilmController::class); $this->router->addRoute('/film-details', FilmController::class); $this->router->addRoute('/film-polling', FilmController::class); + $this->router->addRoute('/film-image', FilmController::class); $this->router->addRoute('/search', FilmController::class); $this->router->addRoute('/add-film', CreateFilmController::class); $this->router->addRoute('/update-film', UpdateFilmController::class); diff --git a/src/controllers/FilmController.php b/src/controllers/FilmController.php index ed0d2d1..470f30a 100644 --- a/src/controllers/FilmController.php +++ b/src/controllers/FilmController.php @@ -9,6 +9,7 @@ use app\services\FavoriteService; use app\services\FilmService; use app\services\ReviewService; use app\services\UserService; +use Exception; class FilmController extends BaseController { @@ -67,13 +68,34 @@ class FilmController extends BaseController parent::render($data, 'film-details', "layouts/base"); } else if ($uri == '/film-polling') { $isInitialSync = $_GET['initial'] ?? 'no'; - error_log($isInitialSync); $data = $this->service->polling($isInitialSync); $films = []; foreach ($data as $film) { - $films[] = $film->toResponse(); + $films[] = array( + 'film_id' => $film->film_id, + 'image_path' => $film->image_path, + 'title' => $film->title); } response::send_json_response($films); + } else if ($uri == '/film-image') { + try { + $filmID = $_GET['id']; + $imagePath = $_SERVER['DOCUMENT_ROOT'] . '/' . $this->service->getImagePath($filmID); + header('Content-Description: File Transfer'); + header('Content-Type: application/octet-stream'); + header('Content-Disposition: inline; filename="' . basename($imagePath) . '"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + header('Content-Length: ' . filesize($imagePath)); + readfile($imagePath); + exit; + } + catch (Exception $e) { + $msg = $e->getMessage(); + $data["error_code"] = $msg; + response::send_json_response($data, 400); + } } } diff --git a/src/services/FilmService.php b/src/services/FilmService.php index 1ae946e..65459d4 100644 --- a/src/services/FilmService.php +++ b/src/services/FilmService.php @@ -3,6 +3,7 @@ namespace app\services; use app\base\BaseService; +use app\exceptions\BadRequestException; use app\models\FilmModel; use app\repositories\FilmRepository; use PDO; @@ -74,6 +75,20 @@ class FilmService extends BaseService return null; } + public function getImagePath($film_id) + { + if (!$film_id) { + throw new BadRequestException("INVALID_ID"); + } + $film = $this->repository->getById($film_id); + + if ($film) { + return "public/" . $film["image_path"]; + } + + throw new BadRequestException("IMAGE_NOT_FOUND"); + } + public function update($film) { $arrParams = []; -- GitLab