c2cd213c4f
Instead of granting a coupon when purchasing a package, grant credit. This changes paymentsconfig.PackagePlan to use credit amount rather than coupon ID. Add additional check to see if a paid invoice with the description exists. If so, don't create and pay another invoice. Change-Id: I81df24984c519c773db5fc8e9070bd7797070ec2
50 lines
1.8 KiB
Go
50 lines
1.8 KiB
Go
// Copyright (C) 2020 Storj Labs, Inc.
|
||
// See LICENSE for copying information.
|
||
|
||
package payments
|
||
|
||
import (
|
||
"context"
|
||
|
||
"github.com/shopspring/decimal"
|
||
|
||
"storj.io/common/uuid"
|
||
)
|
||
|
||
// Balances exposes needed functionality for managing customer balances.
|
||
type Balances interface {
|
||
// ApplyCredit applies a credit of `amount` to the user's stripe balance with a description of `desc`.
|
||
ApplyCredit(ctx context.Context, userID uuid.UUID, amount int64, desc string) (*Balance, error)
|
||
// Get returns the customer balance.
|
||
Get(ctx context.Context, userID uuid.UUID) (Balance, error)
|
||
// ListTransactions returns a list of transactions on the customer's balance.
|
||
ListTransactions(ctx context.Context, userID uuid.UUID) ([]BalanceTransaction, error)
|
||
}
|
||
|
||
// Balance is an entity that holds free credits and coins balance of user.
|
||
// Earned by applying of promotional coupon and coins depositing, respectively.
|
||
type Balance struct {
|
||
FreeCredits int64 `json:"freeCredits"`
|
||
Coins decimal.Decimal `json:"coins"` // STORJ token balance from storjscan.
|
||
Credits decimal.Decimal `json:"credits"`
|
||
// Credits is the balance (in cents) from stripe. This may include the following.
|
||
// 1. legacy Coinpayments deposit.
|
||
// 2. legacy credit for a manual STORJ deposit.
|
||
// 4. bonus manually credited for a storjscan payment once a month before invoicing.
|
||
// 5. any other adjustment we may have to make from time to time manually to the customer´s STORJ balance.
|
||
}
|
||
|
||
// BalanceTransaction represents a single transaction affecting a customer balance.
|
||
type BalanceTransaction struct {
|
||
ID string
|
||
Amount int64
|
||
Description string
|
||
}
|
||
|
||
// PackagePlan is an amount to charge a user one time in exchange for credit of greater value.
|
||
// Price and Credit are in cents USD.
|
||
type PackagePlan struct {
|
||
Price int64
|
||
Credit int64
|
||
}
|