diff --git a/src/app/controllers/search/get_episode_rest.php b/src/app/controllers/search/get_episode_rest.php new file mode 100644 index 0000000000000000000000000000000000000000..62683b8f576627170a6d7fd1018b7c2a17c7b14b --- /dev/null +++ b/src/app/controllers/search/get_episode_rest.php @@ -0,0 +1,26 @@ +<?php + +class GetSearchEpisodeRestController +{ + public function call() + { + $episodeModel = new EpisodeModel(); + + $keyword = ""; + $genre = ""; + if (isset($_GET["keyword"])){ + $keyword = $_GET["keyword"]; + } + if (isset($_GET["genre"])){ + $genre = $_GET["genre"]; + } + + $episodes = $episodeModel->getSearchRest($keyword, $genre); + + http_response_code(200); + header("Content-Type: application/json"); + echo json_encode(["episodes" => $episodes]); + + return; + } +} diff --git a/src/app/controllers/search/get_search_rest.php b/src/app/controllers/search/get_search_rest.php new file mode 100644 index 0000000000000000000000000000000000000000..dc46f2cd83bbd5e2e49e4b793dbb1850eb17978b --- /dev/null +++ b/src/app/controllers/search/get_search_rest.php @@ -0,0 +1,26 @@ +<?php + +class GetSearchPodcastRestController +{ + public function call() + { + $podcastModel = new PodcastModel(); + + $keyword = ""; + $genre = ""; + if (isset($_GET["keyword"])){ + $keyword = $_GET["keyword"]; + } + if (isset($_GET["genre"])){ + $genre = $_GET["genre"]; + } + + $podcasts = $podcastModel->getSearchPodcast($keyword, $genre); + + http_response_code(200); + header("Content-Type: application/json"); + echo json_encode(["podcasts" => $podcasts]); + + return; + } +} diff --git a/src/app/core/app.php b/src/app/core/app.php index cd06729b17afa0e5a1bb7bc9f327761deef7bd34..c8d1276ff4bc1a932e1535100b8e554565c1dca2 100644 --- a/src/app/core/app.php +++ b/src/app/core/app.php @@ -51,6 +51,9 @@ class App $router->get("public/episode-by-id", new GetEpisodeController()); $router->get("public/random-podcast", new GetRandomPodcastController()); + $router->get("public/rest/search/podcast", new GetSearchPodcastRestController()); + $router->get("public/rest/search/episode", new GetSearchEpisodeRestController()); + // POST routes $router->post("public/logout", new LogoutController()); $router->post("public/login", new PostLoginController()); diff --git a/src/app/init.php b/src/app/init.php index dfd58a91481702ad21240a6c33d0d84716a7e8b0..cba77446b9ee1606ba1badf0b386d6cfb2e36947 100644 --- a/src/app/init.php +++ b/src/app/init.php @@ -55,6 +55,8 @@ require_once __DIR__ . "/controllers/seed/post_seed.php"; require_once __DIR__ . "/controllers/podcast/get_podcast.php"; require_once __DIR__ . "/controllers/episode/get_episode.php"; require_once __DIR__ . "/controllers/podcast/get_random_podcast.php"; +require_once __DIR__ . "/controllers/search/get_search_rest.php"; +require_once __DIR__ . "/controllers/search/get_episode_rest.php"; require_once __DIR__ . "/models/podcast.php"; require_once __DIR__ . "/models/episode.php"; diff --git a/src/app/models/episode.php b/src/app/models/episode.php index d976c23cd0678856dcb28546df910f3ca7851cb7..6d5bb5b76f220c3f2f05a1f50be58987b5568ccf 100644 --- a/src/app/models/episode.php +++ b/src/app/models/episode.php @@ -129,4 +129,23 @@ class EpisodeModel $episode = $this->db->fetchAll(); return $episode; } + + public function getSearchRest($keyword, $genre) + { + $query = " + SELECT e.id_episode, e.title, e.description, e.url_thumbnail, p.title AS podcast_title + FROM episode e + NATURAL JOIN podcast p + WHERE e.title LIKE :keyword + AND p.category LIKE :genre + "; + + $this->db->query($query); + + $this->db->bind("keyword", '%' . $keyword . '%'); + $this->db->bind("genre", $genre == "" ? '%' : $genre); + $podcasts = $this->db->fetchAll(); + return $podcasts; + } + } diff --git a/src/app/models/podcast.php b/src/app/models/podcast.php index 8b906dfb4ad276f0aa9617a5b9134ef88eb4f2cd..a96518c422b91110d524d028b660daecd7a02a44 100644 --- a/src/app/models/podcast.php +++ b/src/app/models/podcast.php @@ -248,4 +248,25 @@ class PodcastModel $podcast = $this->db->fetchAll(); return $podcast; } + + public function getSearchPodcast($keyword, $genre) + { + + $query = + "SELECT p.id_podcast, p.title, p.description, p.url_thumbnail + FROM podcast AS p + LEFT JOIN episode AS e ON p.id_podcast = e.id_podcast + WHERE (p.title LIKE :search_value + OR p.description LIKE :search_value) + AND p.category LIKE :genre + "; + + + $this->db->query($query); + + $this->db->bind("search_value", '%' . $keyword . '%'); + $this->db->bind("genre", $genre == "" ? '%' : $genre); + $podcasts = $this->db->fetchAll(); + return $podcasts; + } }