From d4e633283df31ac265f3ce3095fac91539d1cf28 Mon Sep 17 00:00:00 2001 From: Lucas BEE Date: Wed, 15 May 2019 13:07:59 +0000 Subject: [PATCH] Refresh the imdb ratings in a transaction https://w000t.me/c140729392 --- backend/backend/imdb_ratings.go | 13 ++++--------- backend/ratings/ratings.go | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/backend/backend/imdb_ratings.go b/backend/backend/imdb_ratings.go index 12d1856..90d2920 100644 --- a/backend/backend/imdb_ratings.go +++ b/backend/backend/imdb_ratings.go @@ -25,13 +25,8 @@ type ImdbRating struct { Updated time.Time `db:"updated_at"` } -// UpsertImdbRating upsert a ImdbRating in the database -func UpsertImdbRating(db *sqlx.DB, rating *ImdbRating) error { - r, err := db.NamedQuery(upsertRatingQuery, rating) - if err != nil { - return err - } - defer r.Close() - - return nil +// TxUpsertImdbRating upsert a ImdbRating in a transaction +func TxUpsertImdbRating(t *sqlx.Tx, rating *ImdbRating) error { + _, err := t.NamedExec(upsertRatingQuery, rating) + return err } diff --git a/backend/ratings/ratings.go b/backend/ratings/ratings.go index c05479e..02915b2 100644 --- a/backend/ratings/ratings.go +++ b/backend/ratings/ratings.go @@ -49,6 +49,11 @@ func Refresh(env *web.Env) error { return err } + tx, err := env.Database.Beginx() + if err != nil { + return err + } + // Read it scanner := bufio.NewScanner(r) for scanner.Scan() { @@ -69,16 +74,24 @@ func Refresh(env *web.Env) error { continue } - movie := &backend.ImdbRating{ + videoRating := &backend.ImdbRating{ ImdbID: elmts[0], Rating: float32(rating), Votes: int(numVote), } - err = backend.UpsertImdbRating(env.Database, movie) + err = backend.TxUpsertImdbRating(tx, videoRating) if err != nil { + log.WithFields(logrus.Fields{ + "error": err, + }).Error("got error while upserting rating, rollback!") + if rollbackErr := tx.Rollback(); err != nil { + log.WithFields(logrus.Fields{ + "error": rollbackErr, + }).Error("unable to rollack") + } return err } } - return nil + return tx.Commit() }