workflows

package
v1.38.0 Latest Latest
Warning

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

Go to latest
Published: Apr 21, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package workflows provides Temporal workflow definitions for automated recurring billing, subscription lifecycle management, and dunning retry logic.

Index

Constants

View Source
const (
	// TaskQueue is the Temporal task queue for billing workflows.
	TaskQueue = "commerce-billing"

	// Signal names
	SignalCancel          = "cancel"
	SignalReactivate      = "reactivate"
	SignalChangePlan      = "change_plan"
	SignalPaymentReceived = "payment_received"
)

Variables

This section is empty.

Functions

func DunningWorkflow

func DunningWorkflow(ctx workflow.Context, params DunningParams) error

DunningWorkflow retries payment collection on a failed invoice. If all retries fail, the invoice is marked uncollectible and the subscription transitions to unpaid.

func RegisterWorkflows

func RegisterWorkflows(w worker.Worker, burnCredits engine.CreditBurner)

RegisterWorkflows registers all billing workflows and activities with the provided Temporal worker.

func SubscriptionLifecycleWorkflow

func SubscriptionLifecycleWorkflow(ctx workflow.Context, params SubscriptionWorkflowParams) error

SubscriptionLifecycleWorkflow manages the entire lifecycle of a subscription. One instance per active subscription. Workflow ID: "billing:sub:{subscriptionId}"

func WorkflowID

func WorkflowID(subscriptionId string) string

WorkflowID returns the standard workflow ID for a subscription.

Types

type BillingActivities

type BillingActivities struct {
	// BurnCredits is injected from the billing package to avoid circular imports.
	BurnCredits engine.CreditBurner
}

BillingActivities holds dependencies for activity implementations.

func (*BillingActivities) CancelSubscriptionActivity

func (a *BillingActivities) CancelSubscriptionActivity(ctx context.Context, params CancelParams) error

CancelSubscriptionActivity cancels a subscription.

func (*BillingActivities) ChangePlanActivity

func (a *BillingActivities) ChangePlanActivity(ctx context.Context, params ChangePlanParams) error

ChangePlanActivity changes a subscription's plan.

func (*BillingActivities) CollectInvoiceActivity

func (a *BillingActivities) CollectInvoiceActivity(ctx context.Context, params CollectInvoiceParams) (*CollectionActivityResult, error)

CollectInvoiceActivity attempts to collect payment on an invoice.

func (*BillingActivities) MarkUncollectibleActivity

func (a *BillingActivities) MarkUncollectibleActivity(ctx context.Context, params MarkUncollectibleParams) error

MarkUncollectibleActivity marks an invoice as uncollectible.

func (*BillingActivities) RenewSubscriptionActivity

func (a *BillingActivities) RenewSubscriptionActivity(ctx context.Context, params RenewalParams) (*RenewalResult, error)

RenewSubscriptionActivity generates an invoice and attempts collection.

func (*BillingActivities) TransitionSubscriptionActivity

func (a *BillingActivities) TransitionSubscriptionActivity(ctx context.Context, params TransitionParams) error

TransitionSubscriptionActivity updates a subscription's status.

type CancelParams

type CancelParams struct {
	OrgName        string `json:"orgName"`
	SubscriptionId string `json:"subscriptionId"`
	AtPeriodEnd    bool   `json:"atPeriodEnd"`
}

type CancelSignal

type CancelSignal struct {
	AtPeriodEnd bool `json:"atPeriodEnd"`
}

CancelSignal carries cancellation parameters.

type ChangePlanParams

type ChangePlanParams struct {
	OrgName        string `json:"orgName"`
	SubscriptionId string `json:"subscriptionId"`
	NewPlanId      string `json:"newPlanId"`
	Prorate        bool   `json:"prorate"`
}

type ChangePlanSignal

type ChangePlanSignal struct {
	NewPlanId string `json:"newPlanId"`
	Prorate   bool   `json:"prorate"`
}

ChangePlanSignal carries plan change parameters.

type CollectInvoiceParams

type CollectInvoiceParams struct {
	OrgName   string `json:"orgName"`
	InvoiceId string `json:"invoiceId"`
}

type CollectionActivityResult

type CollectionActivityResult struct {
	Success bool `json:"success"`
}

type DunningParams

type DunningParams struct {
	OrgName        string `json:"orgName"`
	SubscriptionId string `json:"subscriptionId"`
	InvoiceId      string `json:"invoiceId"`
	MaxRetries     int    `json:"maxRetries"`
}

DunningParams configures the dunning retry workflow.

type MarkUncollectibleParams

type MarkUncollectibleParams struct {
	OrgName   string `json:"orgName"`
	InvoiceId string `json:"invoiceId"`
}

type RenewalParams

type RenewalParams struct {
	OrgName        string `json:"orgName"`
	SubscriptionId string `json:"subscriptionId"`
}

type RenewalResult

type RenewalResult struct {
	Success       bool      `json:"success"`
	InvoiceId     string    `json:"invoiceId"`
	NextPeriodEnd time.Time `json:"nextPeriodEnd"`
}

type SubscriptionWorkflowParams

type SubscriptionWorkflowParams struct {
	OrgName        string    `json:"orgName"`
	SubscriptionId string    `json:"subscriptionId"`
	UserId         string    `json:"userId"`
	PlanId         string    `json:"planId"`
	TrialEnd       time.Time `json:"trialEnd,omitempty"`
	PeriodEnd      time.Time `json:"periodEnd"`
}

SubscriptionWorkflowParams contains the initial parameters for the workflow.

type TransitionParams

type TransitionParams struct {
	OrgName        string `json:"orgName"`
	SubscriptionId string `json:"subscriptionId"`
	NewStatus      string `json:"newStatus"`
}

Jump to

Keyboard shortcuts

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