storj/satellite/payments/balance.go
Cameron c2cd213c4f satellite/console: purchase package grants credit
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
2023-03-31 22:29:54 +00:00

50 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
}