subscriptionaddon

package
v1.0.0-beta.220 Latest Latest
Warning

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

Go to latest
Published: Aug 17, 2025 License: Apache-2.0 Imports: 17 Imported by: 0

README

Subscription Addon

This package contains the subscription addon related functionality.

Entity Relationship Diagram

erDiagram
    Subscription ||--|| SubscriptionAddon : "has (1:1)"
    SubscriptionAddon ||--o{ SubscriptionAddonQuantity : "has (1:N)"
    SubscriptionAddon ||--o{ SubscriptionAddonRateCard : "has (1:N) calculated from Addon"
    Addon ||--|| SubscriptionAddon : "has (1:1)"

    Subscription {
        string id PK
    }

    Addon {
        string id PK
    }

    SubscriptionAddon {
        string id PK
        string subscription_id FK
        string addon_id FK
    }

    SubscriptionAddonQuantity {
        string id PK
        string subscription_addon_id FK
    }

    SubscriptionAddonRateCard {

    }

Quirks

  1. Feature resolution: When an addon creates a new SubscriptionItem (not a split of an existing one but a new item), the featureKey => feature resolution will happen at sync time. This means, that potentially, in a subscription, items with the same featureKey reference can point to different feature instances.

Documentation

Index

Constants

View Source
const (
	EventSubsystem metadata.EventSubsystem = "subscriptionaddon"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type ChangeQuantityEvent

type ChangeQuantityEvent event

func NewChangeQuantityEvent

func NewChangeQuantityEvent(ctx context.Context, customer customer.Customer, subscriptionAddon SubscriptionAddon) ChangeQuantityEvent

NewChangeQuantityEvent creates a new deleted event

func (ChangeQuantityEvent) EventMetadata

func (s ChangeQuantityEvent) EventMetadata() metadata.EventMetadata

func (ChangeQuantityEvent) EventName

func (s ChangeQuantityEvent) EventName() string

func (ChangeQuantityEvent) Validate

func (s ChangeQuantityEvent) Validate() error

type CreateSubscriptionAddonInput

type CreateSubscriptionAddonInput struct {
	models.MetadataModel

	AddonID        string `json:"addonID"`
	SubscriptionID string `json:"subscriptionID"`

	InitialQuantity CreateSubscriptionAddonQuantityInput `json:"initialQuantity"`
}

func (CreateSubscriptionAddonInput) Validate

func (i CreateSubscriptionAddonInput) Validate() error

type CreateSubscriptionAddonQuantityInput

type CreateSubscriptionAddonQuantityInput struct {
	ActiveFrom time.Time `json:"activeFrom"`
	Quantity   int       `json:"quantity"`
}

func (CreateSubscriptionAddonQuantityInput) Validate

type CreateSubscriptionAddonQuantityRepositoryInput

type CreateSubscriptionAddonQuantityRepositoryInput struct {
	ActiveFrom time.Time `json:"activeFrom"`
	Quantity   int       `json:"quantity"`
}

SubscriptionAddonQuantity

type CreateSubscriptionAddonRepositoryInput

type CreateSubscriptionAddonRepositoryInput struct {
	models.MetadataModel

	Name        string  `json:"name"`
	Description *string `json:"description,omitempty"`

	AddonID        string `json:"addonID"`
	SubscriptionID string `json:"subscriptionID"`
}

SubscriptionAddon

type CreatedEvent

type CreatedEvent event

func NewCreatedEvent

func NewCreatedEvent(ctx context.Context, customer customer.Customer, subscriptionAddon SubscriptionAddon) CreatedEvent

NewCreatedEvent creates a new created event

func (CreatedEvent) EventMetadata

func (s CreatedEvent) EventMetadata() metadata.EventMetadata

func (CreatedEvent) EventName

func (s CreatedEvent) EventName() string

func (CreatedEvent) Validate

func (s CreatedEvent) Validate() error

type ListSubscriptionAddonRepositoryInput

type ListSubscriptionAddonRepositoryInput struct {
	SubscriptionID string `json:"subscriptionID"`

	pagination.Page
}

type ListSubscriptionAddonsInput

type ListSubscriptionAddonsInput struct {
	SubscriptionID string `json:"subscriptionID"`

	pagination.Page
}

func (ListSubscriptionAddonsInput) Validate

func (i ListSubscriptionAddonsInput) Validate() error

type SubscriptionAddon

type SubscriptionAddon struct {
	models.NamespacedID
	models.ManagedModel
	models.MetadataModel

	Name        string  `json:"name"`
	Description *string `json:"description,omitempty"`

	// Maybe break up to AddonID + AddonMeta?
	Addon          addon.Addon `json:"addon"`
	SubscriptionID string      `json:"subscriptionID"`

	// RateCards is populated from the Addon's RateCards
	RateCards  []SubscriptionAddonRateCard                  `json:"rateCards"`
	Quantities timeutil.Timeline[SubscriptionAddonQuantity] `json:"quantities"`
}

func (SubscriptionAddon) GetInstanceAt

func (SubscriptionAddon) GetInstances

func (a SubscriptionAddon) GetInstances() []SubscriptionAddonInstance

type SubscriptionAddonInstance

type SubscriptionAddonInstance struct {
	models.NamespacedID
	models.ManagedModel
	models.MetadataModel
	models.CadencedModel

	Name        string  `json:"name"`
	Description *string `json:"description,omitempty"`

	// AddonID        string `json:"addonID"`
	Addon          addon.Addon `json:"addon"`
	SubscriptionID string      `json:"subscriptionID"`

	RateCards []SubscriptionAddonRateCard `json:"rateCards"`
	Quantity  int                         `json:"quantity"`
}

SubscriptionAddonInstance is a "virtual" instance of a SubscriptionAddon: It merges the quantity information with the Addon information itself and represents the "effective" value of the addon for a given period.

type SubscriptionAddonQuantity

type SubscriptionAddonQuantity struct {
	models.NamespacedID
	models.ManagedModel

	ActiveFrom time.Time `json:"activeFrom"`
	Quantity   int       `json:"quantity"`
}

func (SubscriptionAddonQuantity) AsTimed

type SubscriptionAddonQuantityRepository

type SubscriptionAddonQuantityRepository interface {
	Create(ctx context.Context, subscriptionAddonID models.NamespacedID, input CreateSubscriptionAddonQuantityRepositoryInput) (*SubscriptionAddonQuantity, error)
}

type SubscriptionAddonRateCard

type SubscriptionAddonRateCard struct {
	AddonRateCard addon.RateCard `json:"addonRateCard"`
}

func (SubscriptionAddonRateCard) Apply

Apply applies the addon rate card to the target rate card

func (SubscriptionAddonRateCard) Restore

Restore restores the addon rate card to the target rate card TODO(galexi): instead of instance parameter, change SubscriptionAddonInstance type

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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