cmd/satellite/main: complete/fail pending payments cmd
Add billing commands to manually complete or fail storjscan invoice payments that are stuck in a pending state. Change-Id: Ia19f0a2597201d9d17aad0889eaedff095d706b9
This commit is contained in:
parent
65f14ec3f5
commit
7f02b73b5d
@ -274,6 +274,20 @@ var (
|
|||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: cmdPayAllInvoices,
|
RunE: cmdPayAllInvoices,
|
||||||
}
|
}
|
||||||
|
failPendingInvoiceTokenPaymentCmd = &cobra.Command{
|
||||||
|
Use: "fail-token-payment",
|
||||||
|
Short: "fail pending invoice token payment",
|
||||||
|
Long: "attempts to transition the token invoice payments that are stuck in a pending state to failed.",
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
RunE: cmdFailPendingInvoiceTokenPayments,
|
||||||
|
}
|
||||||
|
completePendingInvoiceTokenPaymentCmd = &cobra.Command{
|
||||||
|
Use: "complete-token-payment",
|
||||||
|
Short: "complete pending invoice token payment",
|
||||||
|
Long: "attempts to transition the token invoice payments that are stuck in a pending state to complete.",
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
RunE: cmdCompletePendingInvoiceTokenPayments,
|
||||||
|
}
|
||||||
stripeCustomerCmd = &cobra.Command{
|
stripeCustomerCmd = &cobra.Command{
|
||||||
Use: "ensure-stripe-customer",
|
Use: "ensure-stripe-customer",
|
||||||
Short: "Ensures that we have a stripe customer for every user",
|
Short: "Ensures that we have a stripe customer for every user",
|
||||||
@ -414,6 +428,8 @@ func init() {
|
|||||||
billingCmd.AddCommand(finalizeCustomerInvoicesCmd)
|
billingCmd.AddCommand(finalizeCustomerInvoicesCmd)
|
||||||
billingCmd.AddCommand(payInvoicesWithTokenCmd)
|
billingCmd.AddCommand(payInvoicesWithTokenCmd)
|
||||||
billingCmd.AddCommand(payAllInvoicesCmd)
|
billingCmd.AddCommand(payAllInvoicesCmd)
|
||||||
|
billingCmd.AddCommand(failPendingInvoiceTokenPaymentCmd)
|
||||||
|
billingCmd.AddCommand(completePendingInvoiceTokenPaymentCmd)
|
||||||
billingCmd.AddCommand(stripeCustomerCmd)
|
billingCmd.AddCommand(stripeCustomerCmd)
|
||||||
consistencyCmd.AddCommand(consistencyGECleanupCmd)
|
consistencyCmd.AddCommand(consistencyGECleanupCmd)
|
||||||
process.Bind(runCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(runCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
@ -450,6 +466,8 @@ func init() {
|
|||||||
process.Bind(finalizeCustomerInvoicesCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(finalizeCustomerInvoicesCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
process.Bind(payInvoicesWithTokenCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(payInvoicesWithTokenCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
process.Bind(payAllInvoicesCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(payAllInvoicesCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
|
process.Bind(failPendingInvoiceTokenPaymentCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
|
process.Bind(completePendingInvoiceTokenPaymentCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
process.Bind(stripeCustomerCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(stripeCustomerCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
process.Bind(consistencyGECleanupCmd, &consistencyGECleanupCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(consistencyGECleanupCmd, &consistencyGECleanupCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
process.Bind(fixLastNetsCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
process.Bind(fixLastNetsCmd, &runCfg, defaults, cfgstruct.ConfDir(confDir), cfgstruct.IdentityDir(identityDir))
|
||||||
@ -905,6 +923,20 @@ func cmdPayAllInvoices(cmd *cobra.Command, args []string) (err error) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cmdFailPendingInvoiceTokenPayments(cmd *cobra.Command, args []string) (err error) {
|
||||||
|
ctx, _ := process.Ctx(cmd)
|
||||||
|
return runBillingCmd(ctx, func(ctx context.Context, payments *stripe.Service, _ satellite.DB) error {
|
||||||
|
return payments.FailPendingInvoiceTokenPayments(ctx, strings.Split(args[0], ","))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func cmdCompletePendingInvoiceTokenPayments(cmd *cobra.Command, args []string) (err error) {
|
||||||
|
ctx, _ := process.Ctx(cmd)
|
||||||
|
return runBillingCmd(ctx, func(ctx context.Context, payments *stripe.Service, _ satellite.DB) error {
|
||||||
|
return payments.CompletePendingInvoiceTokenPayments(ctx, strings.Split(args[0], ","))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func cmdStripeCustomer(cmd *cobra.Command, args []string) (err error) {
|
func cmdStripeCustomer(cmd *cobra.Command, args []string) (err error) {
|
||||||
ctx, _ := process.Ctx(cmd)
|
ctx, _ := process.Ctx(cmd)
|
||||||
|
|
||||||
|
@ -1180,6 +1180,32 @@ func (service *Service) PayInvoicesWithTokenBalance(ctx context.Context, userID
|
|||||||
}, invoices)
|
}, invoices)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FailPendingInvoiceTokenPayments marks all specified pending invoice token payments as failed, and refunds the pending charges.
|
||||||
|
func (service *Service) FailPendingInvoiceTokenPayments(ctx context.Context, pendingPayments []string) (err error) {
|
||||||
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
|
||||||
|
txIDs := make([]int64, len(pendingPayments))
|
||||||
|
|
||||||
|
for i, s := range pendingPayments {
|
||||||
|
txIDs[i], _ = strconv.ParseInt(s, 10, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
return service.billingDB.FailPendingInvoiceTokenPayments(ctx, txIDs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompletePendingInvoiceTokenPayments updates the status of the pending invoice token payment to complete.
|
||||||
|
func (service *Service) CompletePendingInvoiceTokenPayments(ctx context.Context, pendingPayments []string) (err error) {
|
||||||
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
|
||||||
|
txIDs := make([]int64, len(pendingPayments))
|
||||||
|
|
||||||
|
for i, s := range pendingPayments {
|
||||||
|
txIDs[i], _ = strconv.ParseInt(s, 10, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
return service.billingDB.CompletePendingInvoiceTokenPayments(ctx, txIDs...)
|
||||||
|
}
|
||||||
|
|
||||||
// payInvoicesWithTokenBalance attempts to transition the users open invoices to "paid" by charging the customer
|
// payInvoicesWithTokenBalance attempts to transition the users open invoices to "paid" by charging the customer
|
||||||
// token balance.
|
// token balance.
|
||||||
func (service *Service) payInvoicesWithTokenBalance(ctx context.Context, cusID string, wallet storjscan.Wallet, invoices []stripe.Invoice) (err error) {
|
func (service *Service) payInvoicesWithTokenBalance(ctx context.Context, cusID string, wallet storjscan.Wallet, invoices []stripe.Invoice) (err error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user