payout

package
v1.36.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var TransferFee = delay.Func("transfer-fee", func(ctx context.Context, stripeToken, namespace, id string) {
	var fe *fee.Fee
	var tr *transfer.Transfer

	ctx = nscontext.WithNamespace(ctx, namespace)

	err := datastore.RunInTransaction(ctx, func(db *datastore.Datastore) error {

		fe = fee.New(db)
		if err := fe.GetById(id); err != nil {
			log.Warn("Failed to get fee with id '%s': %v", id, err, ctx)
			return err
		}

		if fe.Status == fee.Disputed {
			return fmt.Errorf("fee '%s' is being disputed", fe.Id())
		}

		if fe.Status == fee.Transferred {
			return fmt.Errorf("fee '%s' is already transferred", fe.Id())
		}

		tr := transferFromFee(db, fe)

		fe.Status = fee.Transferred
		fe.TransferId = tr.Id()

		models := []interface{}{tr, fe}
		return multi.Update(models)
	}, nil)

	if err != nil {
		log.Warn("Failed to create transfer for fee '%s', transfer '%s': %v", fe.Id(), tr.Id(), err, ctx)
		return
	}

	sc := stripe.New(ctx, stripeToken)
	res, err := sc.Payout(tr)

	tr.Account.TransferId = res.ID

	if err != nil {
		log.Warn("Failed to create Stripe transfer for fee '%s', transfer '%s': %v", fe.Id(), tr.Id(), err, ctx)

		tr.Status = transfer.Error
		if res.FailureMessage == "" {
			tr.FailureCode = string(res.FailureCode)
			tr.FailureMessage = res.FailureMessage
		} else {
			tr.FailureCode = "stripe-error"
			tr.FailureMessage = err.Error()
		}

	}

	if err := tr.Update(); err != nil {
		log.Error("Failed to update status of failed transfer '%s': %v\n%v", tr.Id(), err, tr, ctx)
	}
})

Create transfer for single fee

Functions

This section is empty.

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL