From ea33c03a9dfa85b1dbc3ffc20ab84f3c92b7fe43 Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Thu, 18 Jan 2024 08:57:56 +0100 Subject: [PATCH] trigger reviews from tui --- client/emdb.go | 44 ++++++++++++++++++++++-------- cmd/api-service/job/job.go | 9 ++++++ cmd/api-service/job/queue.go | 7 ++--- cmd/terminal-client/tui/tabtmdb.go | 4 +++ 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/client/emdb.go b/client/emdb.go index fc73693..264f24c 100644 --- a/client/emdb.go +++ b/client/emdb.go @@ -25,17 +25,6 @@ func NewEMDB(baseURL string, apiKey string) *EMDB { } func (e *EMDB) GetMovies() ([]moviestore.Movie, error) { - //var movies []model.Movie - //for i := 0; i < 5; i++ { - // movies = append(movies, model.Movie{ - // ID: fmt.Sprintf("id-%d", i), - // TMDBID: int64(i), - // IMDBID: fmt.Sprintf("tt%07d", i), - // Title: fmt.Sprintf("Movie %d", i), - // }) - //} - //return movies, nil - url := fmt.Sprintf("%s/movie", e.baseURL) req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { @@ -215,3 +204,36 @@ func (e *EMDB) UpdateReview(review moviestore.Review) error { return nil } + +func (e *EMDB) CreateJob(movieID, action string) error { + j := struct { + MovieID string + Action string + }{ + MovieID: movieID, + Action: action, + } + + body, err := json.Marshal(j) + if err != nil { + return err + } + + url := fmt.Sprintf("%s/job", e.baseURL) + req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body)) + if err != nil { + return err + } + req.Header.Add("Authorization", e.apiKey) + + resp, err := e.c.Do(req) + if err != nil { + return err + } + + if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { + return fmt.Errorf("unexpected status code: %d", resp.StatusCode) + } + + return nil +} diff --git a/cmd/api-service/job/job.go b/cmd/api-service/job/job.go index 9b906aa..8cb5943 100644 --- a/cmd/api-service/job/job.go +++ b/cmd/api-service/job/job.go @@ -1,6 +1,7 @@ package job import ( + "slices" "time" ) @@ -30,3 +31,11 @@ type Job struct { Created time.Time Updated time.Time } + +func Valid(action Action) bool { + if slices.Contains(validActions, action) { + return true + } + + return false +} diff --git a/cmd/api-service/job/queue.go b/cmd/api-service/job/queue.go index a60a3c2..56e5d6b 100644 --- a/cmd/api-service/job/queue.go +++ b/cmd/api-service/job/queue.go @@ -4,7 +4,6 @@ import ( "database/sql" "errors" "log/slog" - "slices" "time" "ewintr.nl/emdb/cmd/api-service/moviestore" @@ -25,8 +24,8 @@ func NewJobQueue(db *moviestore.SQLite, logger *slog.Logger) *JobQueue { } func (jq *JobQueue) Add(movieID string, action Action) error { - if !slices.Contains(validActions, action) { - return errors.New("unknown action") + if !Valid(action) { + return errors.New("invalid action") } _, err := jq.db.Exec(`INSERT INTO job_queue (movie_id, action, status) @@ -48,7 +47,7 @@ func (jq *JobQueue) Run() { SELECT id, movie_id, action FROM job_queue WHERE status='todo' -ORDER BY id DESC +ORDER BY id ASC LIMIT 1`) var job Job diff --git a/cmd/terminal-client/tui/tabtmdb.go b/cmd/terminal-client/tui/tabtmdb.go index f215d63..286c938 100644 --- a/cmd/terminal-client/tui/tabtmdb.go +++ b/cmd/terminal-client/tui/tabtmdb.go @@ -4,6 +4,7 @@ import ( "fmt" "ewintr.nl/emdb/client" + "ewintr.nl/emdb/cmd/api-service/job" "github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/textinput" tea "github.com/charmbracelet/bubbletea" @@ -130,6 +131,9 @@ func (m *tabTMDB) ImportMovieCmd(movie Movie) tea.Cmd { if err != nil { return err } + if err := m.emdb.CreateJob(newMovie.ID, string(job.ActionRefreshIMDBReviews)); err != nil { + return err + } return NewMovie(Movie{m: newMovie}) }