Cleanup movies handling
All checks were successful
continuous-integration/drone/push Build is passing

Do not delete fields about a movie when we already have them
Movie has no UserID field
This commit is contained in:
Lucas BEE 2020-04-06 15:46:45 +02:00
parent b30b87b111
commit 7c2f368b04
3 changed files with 82 additions and 51 deletions

View File

@ -127,42 +127,18 @@ func GetEpisodes(db *sqlx.DB, pShow *polochon.Show, log *logrus.Entry) error {
// updateFromEpisode will update the episodeDB from a ShowEpisode // updateFromEpisode will update the episodeDB from a ShowEpisode
// We just make sure to never update the episodeDB with empty value // We just make sure to never update the episodeDB with empty value
func (e *episodeDB) updateFromEpisode(showEpisode *polochon.ShowEpisode) { func (e *episodeDB) updateFromEpisode(showEpisode *polochon.ShowEpisode) {
if showEpisode.TvdbID != 0 { updateIfNonEmpty(&e.ImdbID, showEpisode.EpisodeImdbID)
e.TvdbID = showEpisode.TvdbID updateIfNonEmpty(&e.ShowImdbID, showEpisode.ShowImdbID)
} updateIfNonEmpty(&e.Title, showEpisode.Title)
if showEpisode.EpisodeImdbID != "" { updateIfNonEmpty(&e.Plot, showEpisode.Plot)
e.ImdbID = showEpisode.EpisodeImdbID updateIfNonEmpty(&e.Thumb, showEpisode.Thumb)
} updateIfNonEmpty(&e.Aired, showEpisode.Aired)
if showEpisode.ShowImdbID != "" { updateIfNonZeroInt(&e.TvdbID, showEpisode.TvdbID)
e.ShowImdbID = showEpisode.ShowImdbID updateIfNonZeroInt(&e.ShowTvdbID, showEpisode.ShowTvdbID)
} updateIfNonZeroInt(&e.Season, showEpisode.Season)
if showEpisode.ShowTvdbID != 0 { updateIfNonZeroInt(&e.Episode, showEpisode.Episode)
e.ShowTvdbID = showEpisode.ShowTvdbID updateIfNonZeroInt(&e.Runtime, showEpisode.Runtime)
} updateIfNonZeroFloat(&e.Rating, showEpisode.Rating)
if showEpisode.Season != 0 {
e.Season = showEpisode.Season
}
if showEpisode.Episode != 0 {
e.Episode = showEpisode.Episode
}
if showEpisode.Title != "" {
e.Title = showEpisode.Title
}
if showEpisode.Rating != 0 {
e.Rating = showEpisode.Rating
}
if showEpisode.Plot != "" {
e.Plot = showEpisode.Plot
}
if showEpisode.Thumb != "" {
e.Thumb = showEpisode.Thumb
}
if showEpisode.Runtime != 0 {
e.Runtime = showEpisode.Runtime
}
if showEpisode.Aired != "" {
e.Aired = showEpisode.Aired
}
} }
// UpsertEpisode upserts the episode // UpsertEpisode upserts the episode

View File

@ -1,6 +1,7 @@
package models package models
import ( import (
"database/sql"
"fmt" "fmt"
"time" "time"
@ -34,7 +35,6 @@ type movieDB struct {
ID string `db:"id"` ID string `db:"id"`
ImdbID string `db:"imdb_id"` ImdbID string `db:"imdb_id"`
TmdbID int `db:"tmdb_id"` TmdbID int `db:"tmdb_id"`
UserID *string `db:"user_id"`
Title string `db:"title"` Title string `db:"title"`
OriginalTitle string `db:"original_title"` OriginalTitle string `db:"original_title"`
SortTitle string `db:"sort_title"` SortTitle string `db:"sort_title"`
@ -49,27 +49,34 @@ type movieDB struct {
Updated time.Time `db:"updated_at"` Updated time.Time `db:"updated_at"`
} }
func getMovieDB(db *sqlx.DB, movie *polochon.Movie) (*movieDB, error) {
var mDB movieDB
err := db.QueryRowx(getMovieQueryByImdbID, movie.ImdbID).StructScan(&mDB)
if err != nil {
return &mDB, err
}
return &mDB, nil
}
// GetMovie fills show details of a polochon.Movie // GetMovie fills show details of a polochon.Movie
func GetMovie(db *sqlx.DB, pMovie *polochon.Movie) error { func GetMovie(db *sqlx.DB, pMovie *polochon.Movie) error {
var mDB movieDB if pMovie.ImdbID == "" {
var err error return fmt.Errorf("Can't get movie details, you have to specify an ImdbID")
if pMovie.ImdbID != "" {
// Get the data from the DB
err = db.QueryRowx(getMovieQueryByImdbID, pMovie.ImdbID).StructScan(&mDB)
} else {
err = fmt.Errorf("Can't get movie details, you have to specify an ImdbID")
} }
// Get the movie from the DB
movie, err := getMovieDB(db, pMovie)
if err != nil { if err != nil {
return err return err
} }
// Fills the polochon.Movie from the movieDB // Fills the polochon.Movie from the movieDB
FillFromDB(&mDB, pMovie) FillMovieFromDB(movie, pMovie)
return nil return nil
} }
// FillFromDB fills a Movie from a movieDB extracted from the DB // FillMovieFromDB fills a Movie from a movieDB extracted from the DB
func FillFromDB(mDB *movieDB, pMovie *polochon.Movie) { func FillMovieFromDB(mDB *movieDB, pMovie *polochon.Movie) {
pMovie.ImdbID = mDB.ImdbID pMovie.ImdbID = mDB.ImdbID
pMovie.Title = mDB.Title pMovie.Title = mDB.Title
pMovie.Rating = mDB.Rating pMovie.Rating = mDB.Rating
@ -84,10 +91,39 @@ func FillFromDB(mDB *movieDB, pMovie *polochon.Movie) {
pMovie.Tagline = mDB.Tagline pMovie.Tagline = mDB.Tagline
} }
// updateFromMovie will update the movieDB from a Movie
// We just make sure to never update the movieDB with empty value
func (m *movieDB) updateFromMovie(movie *polochon.Movie) {
updateIfNonEmpty(&m.ImdbID, movie.ImdbID)
updateIfNonEmpty(&m.Title, movie.Title)
updateIfNonEmpty(&m.OriginalTitle, movie.OriginalTitle)
updateIfNonEmpty(&m.SortTitle, movie.SortTitle)
updateIfNonEmpty(&m.Plot, movie.Plot)
updateIfNonEmpty(&m.Tagline, movie.Tagline)
updateIfNonZeroInt(&m.TmdbID, movie.TmdbID)
updateIfNonZeroInt(&m.Votes, movie.Votes)
updateIfNonZeroInt(&m.Year, movie.Year)
updateIfNonZeroInt(&m.Runtime, movie.Runtime)
updateIfNonZeroFloat(&m.Rating, movie.Rating)
if movie.Genres != nil {
m.Genres = movie.Genres
}
}
// UpsertMovie upsert a polochon Movie in the database // UpsertMovie upsert a polochon Movie in the database
func UpsertMovie(db *sqlx.DB, pMovie *polochon.Movie) error { func UpsertMovie(db *sqlx.DB, pMovie *polochon.Movie) error {
mDB := NewMovieDB(pMovie) // Try to get the movie
r, err := db.NamedQuery(upsertMovieQuery, mDB) movieDB, err := getMovieDB(db, pMovie)
// Return only if the error is != sql.ErrNoRows
if err != nil {
if err != sql.ErrNoRows {
return err
}
}
// Update the movieDB from the movie we have
movieDB.updateFromMovie(pMovie)
r, err := db.NamedQuery(upsertMovieQuery, movieDB)
if err != nil { if err != nil {
return err return err
} }
@ -96,9 +132,9 @@ func UpsertMovie(db *sqlx.DB, pMovie *polochon.Movie) error {
return nil return nil
} }
// NewMovieDB returns a Movie ready to be put in DB from a // newMovieDB returns a Movie ready to be put in DB from a
// polochon Movie // polochon Movie
func NewMovieDB(m *polochon.Movie) movieDB { func newMovieDB(m *polochon.Movie) movieDB {
genres := []string{} genres := []string{}
if m.Genres != nil { if m.Genres != nil {
genres = m.Genres genres = m.Genres

19
backend/models/utils.go Normal file
View File

@ -0,0 +1,19 @@
package models
func updateIfNonEmpty(old *string, newValue string) {
if newValue != "" {
*old = newValue
}
}
func updateIfNonZeroInt(old *int, newValue int) {
if newValue != 0 {
*old = newValue
}
}
func updateIfNonZeroFloat(old *float32, newValue float32) {
if newValue != 0. {
*old = newValue
}
}