mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Rename package webhook to patreon
This commit is contained in:
+10
-28
@@ -16,12 +16,11 @@ import (
|
||||
"github.com/mxpv/podsync/pkg/api"
|
||||
"github.com/mxpv/podsync/pkg/config"
|
||||
"github.com/mxpv/podsync/pkg/session"
|
||||
"github.com/mxpv/podsync/pkg/webhook"
|
||||
"github.com/mxpv/podsync/pkg/support"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
const (
|
||||
creatorID = "2822191"
|
||||
maxHashIDLength = 16
|
||||
)
|
||||
|
||||
@@ -32,10 +31,10 @@ type feed interface {
|
||||
}
|
||||
|
||||
type handler struct {
|
||||
feed feed
|
||||
cfg *config.AppConfig
|
||||
oauth2 oauth2.Config
|
||||
hook *webhook.Handler
|
||||
feed feed
|
||||
cfg *config.AppConfig
|
||||
oauth2 oauth2.Config
|
||||
patreon *support.Patreon
|
||||
}
|
||||
|
||||
func (h handler) index(c *gin.Context) {
|
||||
@@ -90,24 +89,7 @@ func (h handler) patreonCallback(c *gin.Context) {
|
||||
}
|
||||
|
||||
// Determine feature level
|
||||
level := api.DefaultFeatures
|
||||
|
||||
if user.Data.ID == creatorID {
|
||||
level = api.PodcasterFeature
|
||||
} else {
|
||||
pledge, err := h.hook.FindPledge(user.Data.ID)
|
||||
if err != nil {
|
||||
log.Printf("! can't find pledge for user %s: %v", user.Data.ID, err)
|
||||
} else {
|
||||
// Check pledge is valid
|
||||
if pledge.DeclinedSince.IsZero() && !pledge.IsPaused {
|
||||
// Check the amount of pledge
|
||||
if pledge.AmountCents >= 100 {
|
||||
level = api.ExtendedFeatures
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
level := h.patreon.GetFeatureLevel(user.Data.ID)
|
||||
|
||||
identity := &api.Identity{
|
||||
UserId: user.Data.ID,
|
||||
@@ -236,7 +218,7 @@ func (h handler) webhook(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.hook.Handle(&pledge.Data, eventName); err != nil {
|
||||
if err := h.patreon.Hook(&pledge.Data, eventName); err != nil {
|
||||
log.Printf("failed to process patreon event %s (%s): %v", pledge.Data.ID, eventName, err)
|
||||
c.JSON(internalError(err))
|
||||
return
|
||||
@@ -265,9 +247,9 @@ func New(feed feed, db *pg.DB, cfg *config.AppConfig) http.Handler {
|
||||
}
|
||||
|
||||
h := handler{
|
||||
feed: feed,
|
||||
cfg: cfg,
|
||||
hook: webhook.NewHookHandler(db),
|
||||
feed: feed,
|
||||
cfg: cfg,
|
||||
patreon: support.NewPatreon(db),
|
||||
}
|
||||
|
||||
// OAuth 2 configuration
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
package webhook
|
||||
package support
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-pg/pg"
|
||||
"github.com/mxpv/patreon-go"
|
||||
"github.com/mxpv/podsync/pkg/api"
|
||||
"github.com/mxpv/podsync/pkg/models"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type Handler struct {
|
||||
const (
|
||||
creatorID = "2822191"
|
||||
)
|
||||
|
||||
type Patreon struct {
|
||||
db *pg.DB
|
||||
}
|
||||
|
||||
func (h Handler) toModel(pledge *patreon.Pledge) (*models.Pledge, error) {
|
||||
func (h Patreon) toModel(pledge *patreon.Pledge) (*models.Pledge, error) {
|
||||
pledgeID, err := strconv.ParseInt(pledge.ID, 10, 64)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to parse pledge id: %s", pledge.ID)
|
||||
@@ -56,7 +62,7 @@ func (h Handler) toModel(pledge *patreon.Pledge) (*models.Pledge, error) {
|
||||
return model, nil
|
||||
}
|
||||
|
||||
func (h Handler) Handle(pledge *patreon.Pledge, event string) error {
|
||||
func (h Patreon) Hook(pledge *patreon.Pledge, event string) error {
|
||||
model, err := h.toModel(pledge)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -79,11 +85,37 @@ func (h Handler) Handle(pledge *patreon.Pledge, event string) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (h Handler) FindPledge(patronID string) (*models.Pledge, error) {
|
||||
func (h Patreon) FindPledge(patronID string) (*models.Pledge, error) {
|
||||
p := &models.Pledge{}
|
||||
return p, h.db.Model(p).Where("patron_id = ?", patronID).Limit(1).Select()
|
||||
}
|
||||
|
||||
func NewHookHandler(db *pg.DB) *Handler {
|
||||
return &Handler{db: db}
|
||||
func (h Patreon) GetFeatureLevel(patronID string) (level int) {
|
||||
level = api.DefaultFeatures
|
||||
|
||||
if patronID == creatorID {
|
||||
level = api.PodcasterFeature
|
||||
return
|
||||
}
|
||||
|
||||
pledge, err := h.FindPledge(patronID)
|
||||
if err != nil {
|
||||
log.Printf("! can't find pledge for user %s: %v", patronID, err)
|
||||
return
|
||||
}
|
||||
|
||||
// Check pledge is valid
|
||||
if pledge.DeclinedSince.IsZero() && !pledge.IsPaused {
|
||||
// Check the amount of pledge
|
||||
if pledge.AmountCents >= 100 {
|
||||
level = api.ExtendedFeatures
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func NewPatreon(db *pg.DB) *Patreon {
|
||||
return &Patreon{db: db}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package webhook
|
||||
package support
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"github.com/go-pg/pg"
|
||||
"github.com/mxpv/patreon-go"
|
||||
"github.com/mxpv/podsync/pkg/api"
|
||||
"github.com/mxpv/podsync/pkg/models"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -14,7 +15,7 @@ func TestCreate(t *testing.T) {
|
||||
pledge := createPledge()
|
||||
|
||||
hook := createHandler(t)
|
||||
err := hook.Handle(pledge, patreon.EventCreatePledge)
|
||||
err := hook.Hook(pledge, patreon.EventCreatePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
model := &models.Pledge{PledgeID: 12345}
|
||||
@@ -27,12 +28,12 @@ func TestUpdate(t *testing.T) {
|
||||
pledge := createPledge()
|
||||
|
||||
hook := createHandler(t)
|
||||
err := hook.Handle(pledge, patreon.EventCreatePledge)
|
||||
err := hook.Hook(pledge, patreon.EventCreatePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
pledge.Attributes.AmountCents = 999
|
||||
|
||||
err = hook.Handle(pledge, patreon.EventUpdatePledge)
|
||||
err = hook.Hook(pledge, patreon.EventUpdatePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
model := &models.Pledge{PledgeID: 12345}
|
||||
@@ -45,10 +46,10 @@ func TestDelete(t *testing.T) {
|
||||
pledge := createPledge()
|
||||
hook := createHandler(t)
|
||||
|
||||
err := hook.Handle(pledge, patreon.EventCreatePledge)
|
||||
err := hook.Hook(pledge, patreon.EventCreatePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = hook.Handle(pledge, patreon.EventDeletePledge)
|
||||
err = hook.Hook(pledge, patreon.EventDeletePledge)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
@@ -56,7 +57,7 @@ func TestFindPledge(t *testing.T) {
|
||||
pledge := createPledge()
|
||||
hook := createHandler(t)
|
||||
|
||||
err := hook.Handle(pledge, patreon.EventCreatePledge)
|
||||
err := hook.Hook(pledge, patreon.EventCreatePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := hook.FindPledge("67890")
|
||||
@@ -64,7 +65,19 @@ func TestFindPledge(t *testing.T) {
|
||||
require.Equal(t, res.AmountCents, pledge.Attributes.AmountCents)
|
||||
}
|
||||
|
||||
func createHandler(t *testing.T) *Handler {
|
||||
func TestGetFeatureLevel(t *testing.T) {
|
||||
pledge := createPledge()
|
||||
hook := createHandler(t)
|
||||
|
||||
err := hook.Hook(pledge, patreon.EventCreatePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, api.PodcasterFeature, hook.GetFeatureLevel(creatorID))
|
||||
require.Equal(t, api.DefaultFeatures, hook.GetFeatureLevel("xyz"))
|
||||
require.Equal(t, api.ExtendedFeatures, hook.GetFeatureLevel(pledge.Relationships.Patron.Data.ID))
|
||||
}
|
||||
|
||||
func createHandler(t *testing.T) *Patreon {
|
||||
opts, err := pg.ParseURL("postgres://postgres:@localhost/podsync?sslmode=disable")
|
||||
if err != nil {
|
||||
require.NoError(t, err)
|
||||
@@ -75,7 +88,7 @@ func createHandler(t *testing.T) *Handler {
|
||||
_, err = db.Model(&models.Pledge{}).Where("1=1").Delete()
|
||||
require.NoError(t, err)
|
||||
|
||||
return NewHookHandler(db)
|
||||
return NewPatreon(db)
|
||||
}
|
||||
|
||||
func createPledge() *patreon.Pledge {
|
||||
Reference in New Issue
Block a user