subscription

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Jul 8, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrSubscriptionNotFound reports that a subscription does not exist.
	ErrSubscriptionNotFound = errors.New("gotenancy/subscription: subscription not found")

	// ErrSubscriptionAlreadyExists reports that a tenant already has a subscription.
	ErrSubscriptionAlreadyExists = errors.New("gotenancy/subscription: subscription already exists")

	// ErrInvalidSubscription reports invalid subscription metadata.
	ErrInvalidSubscription = errors.New("gotenancy/subscription: invalid subscription")

	// ErrInvalidTransition reports an invalid subscription lifecycle transition.
	ErrInvalidTransition = errors.New("gotenancy/subscription: invalid transition")
)

Functions

This section is empty.

Types

type BillingEvent

type BillingEvent struct {
	TenantID types.TenantID
	Action   string
	FromPlan string
	ToPlan   string
	Status   Status
}

BillingEvent describes a subscription change for external billing systems.

type BillingHook

type BillingHook func(context.Context, BillingEvent) error

BillingHook receives subscription lifecycle changes.

type MemoryService

type MemoryService struct {
	// contains filtered or unexported fields
}

MemoryService is a thread-safe in-memory subscription service.

func NewMemoryService

func NewMemoryService(opts ...Option) *MemoryService

NewMemoryService creates an empty subscription service.

func (*MemoryService) Downgrade

func (service *MemoryService) Downgrade(ctx context.Context, tenantID types.TenantID, planID string) (Subscription, error)

Downgrade changes an active subscription to a lower plan.

func (*MemoryService) Get

func (service *MemoryService) Get(ctx context.Context, tenantID types.TenantID) (Subscription, error)

Get returns a subscription by tenant ID.

func (*MemoryService) Subscribe

func (service *MemoryService) Subscribe(ctx context.Context, tenantID types.TenantID, planID string) (Subscription, error)

Subscribe creates an active subscription for a tenant.

func (*MemoryService) Unsubscribe

func (service *MemoryService) Unsubscribe(ctx context.Context, tenantID types.TenantID) (Subscription, error)

Unsubscribe cancels an active subscription.

func (*MemoryService) Upgrade

func (service *MemoryService) Upgrade(ctx context.Context, tenantID types.TenantID, planID string) (Subscription, error)

Upgrade changes an active subscription to a higher plan.

type Option

type Option func(*MemoryService)

Option configures MemoryService.

func WithBillingHook

func WithBillingHook(hook BillingHook) Option

WithBillingHook sets the billing hook.

func WithClock

func WithClock(clock func() time.Time) Option

WithClock sets the clock used for subscription dates.

type Service

type Service interface {
	Subscribe(ctx context.Context, tenantID types.TenantID, planID string) (Subscription, error)
	Unsubscribe(ctx context.Context, tenantID types.TenantID) (Subscription, error)
	Upgrade(ctx context.Context, tenantID types.TenantID, planID string) (Subscription, error)
	Downgrade(ctx context.Context, tenantID types.TenantID, planID string) (Subscription, error)
	Get(ctx context.Context, tenantID types.TenantID) (Subscription, error)
}

Service manages tenant subscriptions.

type Status

type Status string

Status describes subscription lifecycle state.

const (
	StatusActive    Status = "active"
	StatusExpired   Status = "expired"
	StatusCancelled Status = "cancelled"
)

type Subscription

type Subscription struct {
	TenantID  types.TenantID
	PlanID    string
	Status    Status
	StartDate time.Time
	EndDate   *time.Time
}

Subscription binds a tenant to a plan.

Jump to

Keyboard shortcuts

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