From d7efcbb707115b400fa46fdda820bc597a7e01a5 Mon Sep 17 00:00:00 2001 From: Jacob Casper Date: Thu, 16 Apr 2020 20:32:36 -0500 Subject: [PATCH] Fix genre_xrefs not being created if genre already existed --- routes/artist/artist.go | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/routes/artist/artist.go b/routes/artist/artist.go index e6eb320..a62a282 100644 --- a/routes/artist/artist.go +++ b/routes/artist/artist.go @@ -1,6 +1,7 @@ package artist import ( + "database/sql" "encoding/json" "git.jacobcasper.com/brackets/env" "git.jacobcasper.com/brackets/routes" @@ -95,18 +96,29 @@ func Add(env *env.Env) routes.Handler { env.Db.Db.Exec("INSERT INTO ARTIST (ID, NAME) VALUES (?, ?)", artist.ID, artist.Name) for _, genre := range artist.Genres { - result, err := env.Db.Db.Exec("INSERT OR IGNORE INTO GENRE (NAME) VALUES (?)", genre) - if err != nil { - log.Printf("Failed to insert genre %s: %s", genre, err.Error()) - http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) - return - } + var genreId int64 + row := env.Db.Db.QueryRow(` +SELECT ID +FROM GENRE +WHERE NAME = lower(?) +`, + genre) + + err := row.Scan(&genreId) + if err == sql.ErrNoRows { + result, err := env.Db.Db.Exec("INSERT INTO GENRE (NAME) VALUES (?)", genre) + if err != nil { + log.Printf("Failed to insert genre %s: %s", genre, err.Error()) + http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) + return + } - genreId, err := result.LastInsertId() - if err != nil { - log.Print("Failed to retrieve last insert id: ", err.Error()) - http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) - return + genreId, err = result.LastInsertId() + if err != nil { + log.Print("Failed to retrieve last insert id: ", err.Error()) + http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) + return + } } env.Db.Db.Exec("INSERT INTO ARTIST_GENRE_XREF (ARTIST_ID, GENRE_ID) VALUES (?, ?)", artist.ID, genreId) -- 2.20.1