subscriptionaddon

package
v1.0.0-beta.211 Latest Latest
Warning

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

Go to latest
Published: Apr 21, 2025 License: Apache-2.0 Imports: 12 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

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

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 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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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