From 2f5373e70d68008c2fbd0deeef305b624434f59a Mon Sep 17 00:00:00 2001 From: Jacob Casper Date: Wed, 15 Apr 2020 23:00:03 -0500 Subject: [PATCH] Close over Env struct --- env/env.go | 25 +++++++++++++++++++++++++ main.go | 28 +++++++++++----------------- 2 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 env/env.go diff --git a/env/env.go b/env/env.go new file mode 100644 index 0000000..9efbf2e --- /dev/null +++ b/env/env.go @@ -0,0 +1,25 @@ +package env + +import ( + "git.jacobcasper.com/brackets/client" + "git.jacobcasper.com/brackets/db" + "github.com/zmb3/spotify" +) + +type Env struct { + Db *db.DB + C *spotify.Client +} + +func New() (*Env, error) { + db, err := db.New() + if err != nil { + return nil, err + } + + client, err := client.Get() + if err != nil { + return nil, err + } + return &Env{Db: db, C: client}, nil +} diff --git a/main.go b/main.go index 94fbd81..f0fb3ac 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,7 @@ package main import ( - "git.jacobcasper.com/brackets/client" - "git.jacobcasper.com/brackets/db" + "git.jacobcasper.com/brackets/env" _ "github.com/mattn/go-sqlite3" "github.com/zmb3/spotify" "log" @@ -12,25 +11,20 @@ import ( type handler func(http.ResponseWriter, *http.Request) func main() { - lockedDb, err := db.New() + env, err := env.New() if err != nil { - log.Fatal("Could not open db: ", err.Error()) - } - - client, err := client.Get() - if err != nil { - log.Fatal("Could not get client: ", err.Error()) + log.Fatal("Could not set up Env: ", err.Error()) } http.HandleFunc( "/artist/add", - addArtistHandler(lockedDb, client), + artistAddHandler(env), ) log.Fatal(http.ListenAndServe(":8080", nil)) } -func addArtistHandler(db *db.DB, c *spotify.Client) handler { +func artistAddHandler(env *env.Env) handler { return func(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) @@ -45,19 +39,19 @@ func addArtistHandler(db *db.DB, c *spotify.Client) handler { return } - artist, err := c.GetArtist(spotify.ID(artistId)) + artist, err := env.C.GetArtist(spotify.ID(artistId)) if err != nil { log.Printf("Failed to retrieve artist %s: %s", artistId, err.Error()) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } - db.Mu.Lock() - defer db.Mu.Unlock() - db.Db.Exec("INSERT INTO ARTIST (ID, NAME) VALUES (?, ?)", artist.ID, artist.Name) + env.Db.Mu.Lock() + defer env.Db.Mu.Unlock() + env.Db.Db.Exec("INSERT INTO ARTIST (ID, NAME) VALUES (?, ?)", artist.ID, artist.Name) for _, genre := range artist.Genres { - result, err := db.Db.Exec("REPLACE INTO GENRE (NAME) VALUES (?)", genre) + result, err := env.Db.Db.Exec("REPLACE 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) @@ -71,7 +65,7 @@ func addArtistHandler(db *db.DB, c *spotify.Client) handler { return } - db.Db.Exec("INSERT INTO ARTIST_GENRE_XREF (ARTIST_ID, GENRE_ID) VALUES (?, ?)", artist.ID, genreId) + env.Db.Db.Exec("INSERT INTO ARTIST_GENRE_XREF (ARTIST_ID, GENRE_ID) VALUES (?, ?)", artist.ID, genreId) } w.WriteHeader(http.StatusCreated) } -- 2.20.1