Skip to content
Snippets Groups Projects
Commit eb6598ab authored by Angela Livia Arumsari's avatar Angela Livia Arumsari
Browse files

feat: add and remove film from favorites

parent 32421956
Branches
No related merge requests found
...@@ -5,6 +5,7 @@ namespace app\controllers; ...@@ -5,6 +5,7 @@ namespace app\controllers;
use app\base\BaseController; use app\base\BaseController;
use app\controllers\utils\response; use app\controllers\utils\response;
use app\Request; use app\Request;
use app\services\FavoriteService;
use app\services\FilmService; use app\services\FilmService;
use app\services\ReviewService; use app\services\ReviewService;
use app\services\UserService; use app\services\UserService;
...@@ -13,12 +14,14 @@ class FilmController extends BaseController ...@@ -13,12 +14,14 @@ class FilmController extends BaseController
{ {
protected $review_handler; protected $review_handler;
protected $user_handler; protected $user_handler;
protected $favorite_handler;
public function __construct() public function __construct()
{ {
parent::__construct(FilmService::getInstance()); parent::__construct(FilmService::getInstance());
$this->review_handler = ReviewService::getInstance(); $this->review_handler = ReviewService::getInstance();
$this->user_handler = UserService::getInstance(); $this->user_handler = UserService::getInstance();
$this->favorite_handler = FavoriteService::getInstance();
} }
protected function get($urlParams) protected function get($urlParams)
...@@ -39,6 +42,7 @@ class FilmController extends BaseController ...@@ -39,6 +42,7 @@ class FilmController extends BaseController
parent::render($data, 'films', "layouts/base"); parent::render($data, 'films', "layouts/base");
} elseif ($uri == '/film-details') { } elseif ($uri == '/film-details') {
$data['film'] = $this->service->getById($_GET['film_id']); $data['film'] = $this->service->getById($_GET['film_id']);
$data['isFavorite'] = $this->favorite_handler->isUserFavorite($_SESSION['user_id'], $_GET['film_id']);
parent::render($data, 'film-details', "layouts/base"); parent::render($data, 'film-details', "layouts/base");
} else { } else {
...@@ -52,4 +56,25 @@ class FilmController extends BaseController ...@@ -52,4 +56,25 @@ class FilmController extends BaseController
response::send_json_response($data); response::send_json_response($data);
} }
} }
protected function post($urlParams)
{
if (!isset($_SESSION['user_id'])) {
parent::redirect("/login");
}
$film_id = $urlParams['film_id'];
if (isset($_POST['add_favorite'])) {
$data['film'] = $this->service->getById($film_id);
if ($_POST['add_favorite'] == 'yes') {
$this->favorite_handler->addToFavorite($_SESSION['user_id'], $film_id);
$data['isFavorite'] = true;
parent::render($data, 'film-details', "layouts/base");
}
else {
$this->favorite_handler->removeFromFavorite($_SESSION['user_id'], $film_id);
$data['isFavorite'] = false;
parent::render($data, 'film-details', "layouts/base");
}
}
}
} }
...@@ -20,8 +20,25 @@ class FavoriteRepository extends BaseRepository { ...@@ -20,8 +20,25 @@ class FavoriteRepository extends BaseRepository {
return self::$instance; return self::$instance;
} }
public function getById($user_id, $film_id) {
return $this->findAll(['user_id' => [$user_id, PDO::PARAM_INT], 'film_id' => [$film_id, PDO::PARAM_INT]]);
}
public function getUserFavorites($user_id) { public function getUserFavorites($user_id) {
return $this->findAll(['user_id' => [$user_id, PDO::PARAM_INT]]); return $this->findAll(['user_id' => [$user_id, PDO::PARAM_INT]]);
} }
public function insertFavorite($favorite)
{
$this->insert($favorite, array(
'user_id' => PDO::PARAM_INT,
'film_id' => PDO::PARAM_INT
));
}
public function deleteFavorite($favorite)
{
$this->delete($favorite);
}
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ namespace app\services; ...@@ -5,6 +5,7 @@ namespace app\services;
use app\base\BaseService; use app\base\BaseService;
use app\controllers\FilmController; use app\controllers\FilmController;
use app\exceptions\BadRequestException; use app\exceptions\BadRequestException;
use app\models\FavoriteModel;
use app\models\ReviewModel; use app\models\ReviewModel;
use app\repositories\FavoriteRepository; use app\repositories\FavoriteRepository;
use app\repositories\ReviewRepository; use app\repositories\ReviewRepository;
...@@ -32,4 +33,24 @@ class FavoriteService extends BaseService { ...@@ -32,4 +33,24 @@ class FavoriteService extends BaseService {
return $this->repository->getUserFavorites($user_id); return $this->repository->getUserFavorites($user_id);
} }
public function addToFavorite($user_id, $film_id) {
$favorite = new FavoriteModel();
$favorite->set('user_id', $user_id)->set('film_id', $film_id);
return $this->repository->insertFavorite($favorite);
}
public function removeFromFavorite($user_id, $film_id) {
$favorite = new FavoriteModel();
$favorite->set('user_id', $user_id)->set('film_id', $film_id);
return $this->repository->deleteFavorite($favorite);
}
public function isUserFavorite($user_id, $film_id) {
$favorite = $this->repository->getById($user_id, $film_id);
if (count($favorite) == 0) {
return false;
}
return true;
}
} }
\ No newline at end of file
...@@ -18,11 +18,22 @@ ...@@ -18,11 +18,22 @@
echo "<a href='/update-film?film_id=$film->film_id '><button class='button'>Edit</button></a>"; echo "<a href='/update-film?film_id=$film->film_id '><button class='button'>Edit</button></a>";
} }
?> ?>
<?php if (isset($isFavorite) and $isFavorite): ?>
<form method='post' enctype="multipart/form-data">
<input type='hidden' name='add_favorite' value='no'>
<button type="submit">
<image src="/public/assets/favorite.svg"></image>
</button>
</form>
<?php else: ?>
<form method='post' enctype="multipart/form-data">
<input type='hidden' name='add_favorite' value='yes'>
<button type="submit">
<image src="/public/assets/no-favorite.svg"></image>
</button>
</form>
<?php endif; ?>
<button>
<image id='fav' src="/public/assets/favorite.svg"></image>
</button>
</div> </div>
</div> </div>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment