Close over Env struct
authorJacob Casper <dev@jacobcasper.com>
Thu, 16 Apr 2020 04:00:03 +0000 (23:00 -0500)
committerJacob Casper <dev@jacobcasper.com>
Thu, 16 Apr 2020 04:26:39 +0000 (23:26 -0500)
env/env.go [new file with mode: 0644]
main.go

diff --git a/env/env.go b/env/env.go
new file mode 100644 (file)
index 0000000..9efbf2e
--- /dev/null
@@ -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 (file)
--- 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)
        }