plan

package
v0.45.0 Latest Latest
Warning

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

Go to latest
Published: Jan 27, 2025 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotFound      = errors.New("plan not found")
	ErrInvalidUUID   = errors.New("invalid syntax of uuid")
	ErrInvalidName   = errors.New("plan name is invalid")
	ErrInvalidDetail = errors.New("invalid plan detail")
)

Functions

This section is empty.

Types

type FeatureRepository added in v0.33.0

type FeatureRepository interface {
	List(ctx context.Context, flt product.Filter) ([]product.Feature, error)
}

type File

type File struct {
	Plans    []Plan            `json:"plans" yaml:"plans"`
	Products []product.Product `json:"products" yaml:"products"`
	Features []product.Feature `json:"features" yaml:"features"`
}

type Filter

type Filter struct {
	IDs      []string
	Interval string
	State    string
}

type Plan

type Plan struct {
	ID string `json:"id" yaml:"id"`

	Name        string            `json:"name" yaml:"name"`   // a machine friendly name for the feature
	Title       string            `json:"title" yaml:"title"` // a human friendly title
	Description string            `json:"description" yaml:"description"`
	Metadata    metadata.Metadata `json:"metadata" yaml:"metadata"`

	// Interval is the interval at which the plan is billed
	// e.g. day, week, month, year
	// This is just used to group related product prices and has no
	// immediate effect on the billing engine
	Interval string `json:"interval" yaml:"interval"`

	// OnStartCredits is the number of credits that are awarded when a subscription is started
	OnStartCredits int64 `json:"on_start_credits" yaml:"on_start_credits"`

	// Products for the plan, return only, should not be set when creating a plan
	Products []product.Product `json:"products" yaml:"products"`

	// TrialDays is the number of days a subscription is in trial
	TrialDays int64 `json:"trial_days" yaml:"trial_days"`

	State     string
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt *time.Time
}

Plan is a collection of products it is a logical grouping of products and doesn't have a corresponding billing engine entity

func (Plan) GetUserSeatProduct added in v0.8.19

func (p Plan) GetUserSeatProduct() (product.Product, bool)

func (Plan) IsFree added in v0.43.0

func (p Plan) IsFree() bool

type PriceRepository added in v0.33.2

type PriceRepository interface {
	List(ctx context.Context, flt product.Filter) ([]product.Price, error)
}

type ProductService added in v0.8.14

type ProductService interface {
	Create(ctx context.Context, p product.Product) (product.Product, error)
	GetByID(ctx context.Context, id string) (product.Product, error)
	Update(ctx context.Context, p product.Product) (product.Product, error)
	AddPlan(ctx context.Context, p product.Product, planID string) error

	CreatePrice(ctx context.Context, price product.Price) (product.Price, error)
	UpdatePrice(ctx context.Context, price product.Price) (product.Price, error)
	GetPriceByID(ctx context.Context, id string) (product.Price, error)
	GetPriceByProductID(ctx context.Context, id string) ([]product.Price, error)

	List(ctx context.Context, flt product.Filter) ([]product.Product, error)

	UpsertFeature(ctx context.Context, f product.Feature) (product.Feature, error)
	GetFeatureByID(ctx context.Context, id string) (product.Feature, error)
	GetFeatureByProductID(ctx context.Context, id string) ([]product.Feature, error)
}

type Repository

type Repository interface {
	GetByID(ctx context.Context, id string) (Plan, error)
	GetByName(ctx context.Context, name string) (Plan, error)
	Create(ctx context.Context, plan Plan) (Plan, error)
	UpdateByName(ctx context.Context, plan Plan) (Plan, error)
	List(ctx context.Context, filter Filter) ([]Plan, error)
	ListWithProducts(ctx context.Context, filter Filter) ([]Plan, error)
}

type Service

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

func NewService

func NewService(stripeClient *client.API, planRepository Repository, productService ProductService, featureRepository FeatureRepository, priceRepository PriceRepository) *Service

func (Service) Create

func (s Service) Create(ctx context.Context, p Plan) (Plan, error)

func (Service) GetByID

func (s Service) GetByID(ctx context.Context, id string) (Plan, error)

func (Service) List

func (s Service) List(ctx context.Context, filter Filter) ([]Plan, error)

func (Service) UpsertPlans

func (s Service) UpsertPlans(ctx context.Context, planFile File) error

Jump to

Keyboard shortcuts

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