From e794024786d12aa396f281bcb694bc3963c0ca0b Mon Sep 17 00:00:00 2001 From: Haelnorr Date: Sun, 23 Feb 2025 16:06:47 +1100 Subject: [PATCH] Added movie page and route handler --- handler/movie.go | 37 +++++++++++++++++++++++++++++++++++++ server/routes.go | 3 +++ view/page/movie.templ | 30 ++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 handler/movie.go create mode 100644 view/page/movie.templ diff --git a/handler/movie.go b/handler/movie.go new file mode 100644 index 0000000..6deeee3 --- /dev/null +++ b/handler/movie.go @@ -0,0 +1,37 @@ +package handler + +import ( + "net/http" + "projectreshoot/config" + "projectreshoot/tmdb" + "projectreshoot/view/page" + "strconv" + + "github.com/rs/zerolog" +) + +func Movie( + logger *zerolog.Logger, + config *config.Config, +) http.Handler { + return http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + id := r.PathValue("movie_id") + movie_id, err := strconv.ParseInt(id, 10, 32) + if err != nil { + ErrorPage(http.StatusNotFound, w, r) + logger.Error().Err(err).Str("movie_id", id). + Msg("Error occured getting the movie") + return + } + movie, err := tmdb.GetMovie(int32(movie_id), config.TMDBToken) + if err != nil { + ErrorPage(http.StatusInternalServerError, w, r) + logger.Error().Err(err).Int32("movie_id", int32(movie_id)). + Msg("Error occured getting the movie") + return + } + page.Movie(movie).Render(r.Context(), w) + }, + ) +} diff --git a/server/routes.go b/server/routes.go index 8462e72..66b3a05 100644 --- a/server/routes.go +++ b/server/routes.go @@ -60,4 +60,7 @@ func addRoutes( route("POST /change-username", loggedIn(fresh(handler.ChangeUsername(logger, conn)))) route("POST /change-bio", loggedIn(handler.ChangeBio(logger, conn))) route("POST /change-password", loggedIn(fresh(handler.ChangePassword(logger, conn)))) + + // Movie page + route("GET /movie/{movie_id}", handler.Movie(logger, config)) } diff --git a/view/page/movie.templ b/view/page/movie.templ new file mode 100644 index 0000000..740bc3f --- /dev/null +++ b/view/page/movie.templ @@ -0,0 +1,30 @@ +package page + +import "projectreshoot/tmdb" +import "projectreshoot/view/layout" +import "fmt" + +func formatRuntime(minutes int) string { + hours := minutes / 60 + mins := minutes % 60 + return fmt.Sprintf("%dh %02dm", hours, mins) +} + +templ Movie(movie *tmdb.Movie) { + @layout.Global() { +
+
+
{ movie.Poster }
+
+ + { movie.Title } + + + { formatRuntime(movie.Runtime) } + - { movie.ReleaseDate[:4] } + +
+
+
+ } +}