80 lines
1.7 KiB
Go
80 lines
1.7 KiB
Go
|
package arn
|
||
|
|
||
|
import (
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/aerogo/nano"
|
||
|
)
|
||
|
|
||
|
// PayPalPayment is an approved and exeucted PayPal payment.
|
||
|
type PayPalPayment struct {
|
||
|
ID string `json:"id"`
|
||
|
UserID string `json:"userId"`
|
||
|
PayerID string `json:"payerId"`
|
||
|
Amount string `json:"amount"`
|
||
|
Currency string `json:"currency"`
|
||
|
Method string `json:"method"`
|
||
|
Created string `json:"created"`
|
||
|
}
|
||
|
|
||
|
// Gems returns the total amount of gems.
|
||
|
func (payment *PayPalPayment) Gems() int {
|
||
|
amount, err := strconv.ParseFloat(payment.Amount, 64)
|
||
|
|
||
|
if err != nil {
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
return int(amount)
|
||
|
}
|
||
|
|
||
|
// User returns the user who made the payment.
|
||
|
func (payment *PayPalPayment) User() *User {
|
||
|
user, _ := GetUser(payment.UserID)
|
||
|
return user
|
||
|
}
|
||
|
|
||
|
// Save saves the paypal payment in the database.
|
||
|
func (payment *PayPalPayment) Save() {
|
||
|
DB.Set("PayPalPayment", payment.ID, payment)
|
||
|
}
|
||
|
|
||
|
// StreamPayPalPayments returns a stream of all paypal payments.
|
||
|
func StreamPayPalPayments() <-chan *PayPalPayment {
|
||
|
channel := make(chan *PayPalPayment, nano.ChannelBufferSize)
|
||
|
|
||
|
go func() {
|
||
|
for obj := range DB.All("PayPalPayment") {
|
||
|
channel <- obj.(*PayPalPayment)
|
||
|
}
|
||
|
|
||
|
close(channel)
|
||
|
}()
|
||
|
|
||
|
return channel
|
||
|
}
|
||
|
|
||
|
// AllPayPalPayments returns a slice of all paypal payments.
|
||
|
func AllPayPalPayments() ([]*PayPalPayment, error) {
|
||
|
all := make([]*PayPalPayment, 0, DB.Collection("PayPalPayment").Count())
|
||
|
|
||
|
for obj := range StreamPayPalPayments() {
|
||
|
all = append(all, obj)
|
||
|
}
|
||
|
|
||
|
return all, nil
|
||
|
}
|
||
|
|
||
|
// FilterPayPalPayments filters all paypal payments by a custom function.
|
||
|
func FilterPayPalPayments(filter func(*PayPalPayment) bool) ([]*PayPalPayment, error) {
|
||
|
var filtered []*PayPalPayment
|
||
|
|
||
|
for obj := range StreamPayPalPayments() {
|
||
|
if filter(obj) {
|
||
|
filtered = append(filtered, obj)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return filtered, nil
|
||
|
}
|