From 71de282ec45fff1d7f2b2dc480a301f5343b7386 Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Sat, 20 Jan 2024 11:22:58 +0100 Subject: [PATCH] next no titles handler --- cmd/api-service/handler/review.go | 19 ++++++++++++++++++- cmd/api-service/moviestore/review.go | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/cmd/api-service/handler/review.go b/cmd/api-service/handler/review.go index 943393b..4f3a746 100644 --- a/cmd/api-service/handler/review.go +++ b/cmd/api-service/handler/review.go @@ -33,8 +33,10 @@ func (reviewAPI *ReviewAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) { reviewAPI.ListUnrated(w, r) case r.Method == http.MethodGet && subPath == "unrated" && subSubPath == "next": reviewAPI.NextUnrated(w, r) - case r.Method == http.MethodGet && subPath == "no_titles" && subSubPath == "": + case r.Method == http.MethodGet && subPath == "no-titles" && subSubPath == "": reviewAPI.ListNoTitles(w, r) + case r.Method == http.MethodGet && subPath != "no-titles" && subSubPath == "next": + reviewAPI.NextUnrated(w, r) case r.Method == http.MethodGet && subPath != "": reviewAPI.Get(w, r, subPath) case r.Method == http.MethodPut && subPath != "": @@ -119,6 +121,21 @@ func (reviewAPI *ReviewAPI) ListNoTitles(w http.ResponseWriter, r *http.Request) } } +func (reviewAPI *ReviewAPI) NextNoTitles(w http.ResponseWriter, r *http.Request) { + logger := reviewAPI.logger.With("method", "nextNoTitles") + + review, err := reviewAPI.repo.FindNextNoTitles() + if err != nil { + Error(w, http.StatusInternalServerError, "could not get review", err, logger) + return + } + + if err := json.NewEncoder(w).Encode(review); err != nil { + Error(w, http.StatusInternalServerError, "could not encode review", err, logger) + return + } +} + func (reviewAPI *ReviewAPI) Store(w http.ResponseWriter, r *http.Request, id string) { logger := reviewAPI.logger.With("method", "store") diff --git a/cmd/api-service/moviestore/review.go b/cmd/api-service/moviestore/review.go index 4a39fcf..e678993 100644 --- a/cmd/api-service/moviestore/review.go +++ b/cmd/api-service/moviestore/review.go @@ -135,6 +135,24 @@ func (rr *ReviewRepository) FindUnrated() ([]Review, error) { return reviews, nil } +func (rr *ReviewRepository) FindNextNoTitles() (Review, error) { + row := rr.db.QueryRow(`SELECT id, movie_id, source, url, review, movie_rating, quality, mentioned_titles FROM review WHERE mentioned_titles='{}' LIMIT 1`) + if row.Err() != nil { + return Review{}, row.Err() + } + + r := Review{} + var titles string + if err := row.Scan(&r.ID, &r.MovieID, &r.Source, &r.URL, &r.Review, &r.MovieRating, &r.Quality, &titles); err != nil { + return Review{}, err + } + if err := json.Unmarshal([]byte(titles), &r.Titles); err != nil { + return Review{}, err + } + + return r, nil +} + func (rr *ReviewRepository) FindNoTitles() ([]Review, error) { rows, err := rr.db.Query(`SELECT id, movie_id, source, url, review, movie_rating, quality, mentioned_titles FROM review WHERE mentioned_titles='{}'`) if err != nil {