Added movie page and route handler
This commit is contained in:
37
handler/movie.go
Normal file
37
handler/movie.go
Normal file
@@ -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)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -60,4 +60,7 @@ func addRoutes(
|
|||||||
route("POST /change-username", loggedIn(fresh(handler.ChangeUsername(logger, conn))))
|
route("POST /change-username", loggedIn(fresh(handler.ChangeUsername(logger, conn))))
|
||||||
route("POST /change-bio", loggedIn(handler.ChangeBio(logger, conn)))
|
route("POST /change-bio", loggedIn(handler.ChangeBio(logger, conn)))
|
||||||
route("POST /change-password", loggedIn(fresh(handler.ChangePassword(logger, conn))))
|
route("POST /change-password", loggedIn(fresh(handler.ChangePassword(logger, conn))))
|
||||||
|
|
||||||
|
// Movie page
|
||||||
|
route("GET /movie/{movie_id}", handler.Movie(logger, config))
|
||||||
}
|
}
|
||||||
|
|||||||
30
view/page/movie.templ
Normal file
30
view/page/movie.templ
Normal file
@@ -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() {
|
||||||
|
<div class="bg-surface0">
|
||||||
|
<div class="">
|
||||||
|
<div class="bg-overlay2">{ movie.Poster }</div>
|
||||||
|
<div class="">
|
||||||
|
<span class="">
|
||||||
|
{ movie.Title }
|
||||||
|
</span>
|
||||||
|
<span class="">
|
||||||
|
{ formatRuntime(movie.Runtime) }
|
||||||
|
- { movie.ReleaseDate[:4] }
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user