Cleanup movies handling
All checks were successful
continuous-integration/drone/push Build is passing
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:
parent
b30b87b111
commit
7c2f368b04
@ -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
|
||||||
|
@ -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
19
backend/models/utils.go
Normal 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
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user