/
stripe_webhooks.go
76 lines (70 loc) · 2.37 KB
/
stripe_webhooks.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package transaction
import (
firebase "firebase.google.com/go/v4"
"github.com/charisworks/charisworks-backend/internal/cash"
"github.com/charisworks/charisworks-backend/internal/items"
)
type Webhook struct {
StripeUtils cash.IUtils
TransactionRepository IRepository
ItemUpdater items.IUpdater
App *firebase.App
}
func (r Webhook) PurchaseComplete(stripeTransactionId string) (transactionDetails TransactionDetails, err error) {
transactionDetails, _, transferList, err := r.TransactionRepository.GetDetails(stripeTransactionId)
if err != nil {
return transactionDetails, err
}
for _, t := range transferList {
transferId := r.StripeUtils.Transfer(t.amount, t.stripeAccountId, stripeTransactionId)
err = r.TransactionRepository.StatusUpdateItems(stripeTransactionId, t.itemId, map[string]interface{}{"stripe_transfer_id": transferId, "status": Paid})
if err != nil {
return transactionDetails, err
}
}
for _, i := range transactionDetails.Items {
err = r.ItemUpdater.ReduceStock(i.ItemId, i.Quantity)
if err != nil {
return transactionDetails, err
}
}
err = r.TransactionRepository.StatusUpdate(stripeTransactionId, map[string]interface{}{"status": Complete})
if err != nil {
return transactionDetails, err
}
return transactionDetails, nil
}
func (r Webhook) PurchaseFail(stripeTransactionId string) error {
_, _, transferList, err := r.TransactionRepository.GetDetails(stripeTransactionId)
if err != nil {
return err
}
for _, t := range transferList {
err = r.TransactionRepository.StatusUpdateItems(stripeTransactionId, t.itemId, map[string]interface{}{"status": "failed"})
if err != nil {
return err
}
}
err = r.TransactionRepository.StatusUpdate(stripeTransactionId, map[string]interface{}{"status": "failed"})
if err != nil {
return err
}
return nil
}
func (r Webhook) PurchaseCanceled(stripeTransactionId string) error {
_, _, transferList, err := r.TransactionRepository.GetDetails(stripeTransactionId)
if err != nil {
return err
}
for _, t := range transferList {
err = r.TransactionRepository.StatusUpdateItems(stripeTransactionId, t.itemId, map[string]interface{}{"status": string(Cancelled)})
if err != nil {
return err
}
}
err = r.TransactionRepository.StatusUpdate(stripeTransactionId, map[string]interface{}{"status": string(Cancelled)})
if err != nil {
return err
}
return nil
}