plan

package
v0.8.40 Latest Latest
Warning

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

Go to latest
Published: Apr 4, 2024 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 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
}

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

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

type Service

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

func NewService

func NewService(stripeClient *client.API, planRepository Repository, productService ProductService) *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