basic patreon support with initial endpoint for getting the supporters
--- a/.hgignore Sat May 26 18:05:34 2018 -0500
+++ b/.hgignore Sun May 27 19:25:23 2018 -0500
@@ -1,3 +1,4 @@
--- a/config/config.go Sat May 26 18:05:34 2018 -0500
+++ b/config/config.go Sun May 27 19:25:23 2018 -0500
@@ -9,6 +9,8 @@
Hostname string `envconfig:"HOSTNAME"`
Port int32 `envconfig:"PORT"`
StaticFilesPath string `envconfig:"STATIC_FILES_PATH" default:"static"`
+ PatreonAccessToken string `envconfig:"PATREON_ACCESS_TOKEN" required:"true"` --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/db/db.go Sun May 27 19:25:23 2018 -0500
@@ -0,0 +1,25 @@
+ "github.com/jinzhu/gorm" + _ "github.com/jinzhu/gorm/dialects/sqlite" + db, err := gorm.Open("sqlite3", "file::memory:?mode=memory&cache=shared") + db.AutoMigrate(&Supporter{}) --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/db/supporter.go Sun May 27 19:25:23 2018 -0500
@@ -0,0 +1,14 @@
+ "github.com/jinzhu/gorm" --- a/main.go Sat May 26 18:05:34 2018 -0500
+++ b/main.go Sun May 27 19:25:23 2018 -0500
@@ -5,14 +5,67 @@
"github.com/aphistic/gomol"
+ "github.com/jinzhu/gorm" + "bitbucket.org/rw_grim/peacock/config" + "bitbucket.org/rw_grim/peacock/db" "bitbucket.org/rw_grim/peacock/logging"
+ "bitbucket.org/rw_grim/peacock/patreon" "bitbucket.org/rw_grim/peacock/server"
+ "bitbucket.org/rw_grim/peacock/service" +func setupServices(db *gorm.DB) error { + services := map[string]service.Service{ + "patreon": &patreon.Patreon{}, + serviceRes := make(chan error) + setupRes := make(chan error) + go func(serviceRes, setupRes chan error) { + for err := range serviceRes { + gomol.Warnf("error: %s", err) + }(serviceRes, setupRes) + // initialize all the services at once + for name, service := range services { + go func(res chan error) { + gomol.Infof("initializing service %s", name) + res <- service.Initialize(db, cfg) + // wait for the initializers to finish + // close the overall initialization result channel @@ -21,6 +74,17 @@
+ err = setupServices(db) + fmt.Printf("error: %s\n", err) // setup a signal channel
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patreon/patreon.go Sun May 27 19:25:23 2018 -0500
@@ -0,0 +1,75 @@
+ "bitbucket.org/rw_grim/paytreon" + "github.com/aphistic/gomol" + "github.com/jinzhu/gorm" + "bitbucket.org/rw_grim/peacock/config" + pdb "bitbucket.org/rw_grim/peacock/db" + client *paytreon.Client +func (p *Patreon) Initialize(db *gorm.DB, cfg config.Config) error { + p.client = paytreon.NewClientWithStaticToken(cfg.PatreonAccessToken) + user, err := p.client.CurrentUser() + gomol.Infof("connected to patreon as %s", user.FullName) + campaings, err := p.client.Campaigns() + for _, campaign := range campaings { + pledges, err := p.client.Pledges(campaign) + for _, pledge := range pledges { + p.addPledge(db, pledge) +func (p *Patreon) Routes() http.Handler { +func (p *Patreon) addPledge(db *gorm.DB, pledge *paytreon.Pledge) error { + Name: pledge.Patron.FullName, + Avatar: pledge.Patron.ThumbURL, + Title: pledge.Reward.Title, + errors := db.Create(&s).GetErrors() + for _, err := range errors { + gomol.Warnf("error: %s", err) + gomol.Infof("Added %s %s %s", s.Service, s.Title, s.Name) --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/api.go Sun May 27 19:25:23 2018 -0500
@@ -0,0 +1,20 @@
+ "github.com/aphistic/gomol" + "bitbucket.org/rw_grim/peacock/db" +func supportersHandler(w http.ResponseWriter, r *http.Request) { + users := []db.Supporter{} + gomol.Infof("users: %#v", users) + json.NewEncoder(w).Encode(users) --- a/server/server.go Sat May 26 18:05:34 2018 -0500
+++ b/server/server.go Sun May 27 19:25:23 2018 -0500
@@ -36,6 +36,8 @@
func setupRoutes(cfg config.Config) http.Handler {
router := http.NewServeMux()
+ router.HandleFunc("/api/supporters", supportersHandler) static := http.FileServer(http.Dir(cfg.StaticFilesPath))
router.Handle("/", static)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/service/service.go Sun May 27 19:25:23 2018 -0500
@@ -0,0 +1,14 @@
+ "github.com/jinzhu/gorm" + "bitbucket.org/rw_grim/peacock/config" +type Service interface { + Initialize(*gorm.DB, config.Config) error