Documentation
¶
Overview ¶
Package entitlements is a wrapper package for the entitlements service and a basic stripe integration
Index ¶
- func WritePlansToYAML(product []Product, filename string) error
- type Checkout
- type Config
- type Customer
- type Feature
- type Plan
- type Price
- type Product
- type ProductFeature
- type StripeClient
- func (sc *StripeClient) CancelSubscription(id string, params *stripe.SubscriptionCancelParams) (*stripe.Subscription, error)
- func (sc *StripeClient) CreateBillingPortalUpdateSession(subsID, custID string) (Checkout, error)
- func (sc *StripeClient) CreateCustomer(email string) (*stripe.Customer, error)
- func (sc *StripeClient) CreateSubscription(params *stripe.SubscriptionParams) (*stripe.Subscription, error)
- func (sc *StripeClient) CreateTrialSubscription(customerID string) (*Subscription, error)
- func (sc *StripeClient) DeleteCustomer(id string) error
- func (sc *StripeClient) GetCustomerByID(id string) (*stripe.Customer, error)
- func (sc *StripeClient) GetPrices() []Price
- func (sc *StripeClient) GetProductFeatures(productID string) []ProductFeature
- func (sc *StripeClient) GetProducts() []Product
- func (sc *StripeClient) GetSubscriptionByID(id string) (*stripe.Subscription, error)
- func (sc *StripeClient) ListOrCreateSubscriptions(customerID string) (*Subscription, error)
- func (sc *StripeClient) UpdateCustomer(id string, params *stripe.CustomerParams) (*stripe.Customer, error)
- func (sc *StripeClient) UpdateSubscription(id string, params *stripe.SubscriptionParams) (*stripe.Subscription, error)
- type StripeOptions
- type Subs
- type Subscription
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func WritePlansToYAML ¶
WritePlansToYAML writes the []Product information into a YAML file.
Types ¶
type Config ¶
type Config struct {
// Enabled determines if the entitlements service is enabled
Enabled bool `json:"enabled" koanf:"enabled" default:"false"`
// PublicStripeKey is the key for the stripe service
PublicStripeKey string `json:"publicStripeKey" koanf:"publicStripeKey" default:""`
// PrivateStripeKey is the key for the stripe service
PrivateStripeKey string `json:"privateStripeKey" koanf:"privateStripeKey" default:""`
// StripeWebhookSecret is the secret for the stripe service
StripeWebhookSecret string `json:"stripeWebhookSecret" koanf:"stripeWebhookSecret" default:""`
// TrialSubscriptionPriceID is the price ID for the trial subscription
TrialSubscriptionPriceID string `json:"trialSubscriptionPriceID" koanf:"trialSubscriptionPriceID" default:"price_1QKLyeBvxky1R7SvaZYGWyQb"`
}
type Customer ¶
type Customer struct {
ID string `json:"customer_id" yaml:"customer_id"`
Email string `json:"email" yaml:"email"`
Phone string `json:"phone" yaml:"phone"`
Address string `json:"address" yaml:"address"`
Plans []Plan `json:"plans" yaml:"plans"`
StripeParams *stripe.CustomerParams
StripeCustomer []stripe.Customer
}
NOTE: these are incomplete and are only meant to be used as a reference currently - they will be updated as the project progresses Customer holds the customer information
type Feature ¶
type Feature struct {
ID string `json:"id" yaml:"id"`
Name string `json:"name" yaml:"name"`
Lookupkey string `json:"lookupkey" yaml:"lookupkey"`
ProductFeatureID string `json:"product_feature_id" yaml:"product_feature_id"`
}
Feature are part of a product
type Plan ¶
type Plan struct {
ID string `json:"plan_id" yaml:"plan_id"`
Product string `json:"product_id" yaml:"product_id"`
Price string `json:"price_id" yaml:"price_id"`
StartDate int64 `json:"start_date" yaml:"start_date"`
EndDate int64 `json:"end_date" yaml:"end_date"`
StripeParams *stripe.SubscriptionParams
StripeSubscription []stripe.Subscription
Products []Product
Features []Feature
TrialEnd int64
Status string
}
Plan is the recurring context that holds the payment information
type Price ¶
type Price struct {
ID string `json:"price_id" yaml:"price_id"`
Price float64 `json:"price" yaml:"price"`
ProductID string `json:"product_id" yaml:"product_id"`
Interval string `json:"interval" yaml:"interval"`
StripeParams *stripe.PriceParams `json:"stripe_params,omitempty" yaml:"stripe_params,omitempty"`
StripePrice []stripe.Price `json:"stripe_price,omitempty" yaml:"stripe_price,omitempty"`
}
Price holds stripe price params and the associated Product
type Product ¶
type Product struct {
ID string `json:"product_id" yaml:"product_id"`
Name string `json:"name" yaml:"name"`
Description string `json:"description" yaml:"description"`
Features []Feature `json:"features" yaml:"features"`
Prices []Price `json:"prices" yaml:"prices"`
StripeParams *stripe.ProductParams `json:"stripe_params,omitempty" yaml:"stripe_params,omitempty"`
StripeProduct []stripe.Product `json:"stripe_product,omitempty" yaml:"stripe_product,omitempty"`
}
Product holds what we'd more commply call a "tier"
type ProductFeature ¶
type ProductFeature struct {
ProductFeatureID string `json:"product_feature_id" yaml:"product_feature_id"`
FeatureID string `json:"feature_id" yaml:"feature_id"`
ProductID string `json:"product_id" yaml:"product_id"`
Name string `json:"name" yaml:"name"`
Lookupkey string `json:"lookupkey" yaml:"lookupkey"`
}
type StripeClient ¶
type StripeClient struct {
// Client is the Stripe client and is used for accessing all subsequent stripe objects, e.g. products, prices, etc.
Client *client.API
// TODO[MKA] cleanup these fields and determine if an interface is easier to use than internal struct mapping and how to mock out the use of the stripe client
// Customer is a ref to a generic Customer struct used to wrap Stripe customer and Openlane Organizations (typically)
Cust Customer
// Plans are a nomenclature for the recurring context that holds the payment information and is synonymous with Stripe subscriptions
Plan Plan
// Product is a stripe product; also know as a "tier"
Product Product
// Price holds the interval and amount to be billed
Price Price
// contains filtered or unexported fields
}
StripeClient is a client for the Stripe API
func NewStripeClient ¶
func NewStripeClient(opts ...StripeOptions) *StripeClient
NewStripeClient creates a new Stripe client
func (*StripeClient) CancelSubscription ¶
func (sc *StripeClient) CancelSubscription(id string, params *stripe.SubscriptionCancelParams) (*stripe.Subscription, error)
CancelSubscription cancels a subscription
func (*StripeClient) CreateBillingPortalUpdateSession ¶
func (sc *StripeClient) CreateBillingPortalUpdateSession(subsID, custID string) (Checkout, error)
TODO determine what return URL is needed (if any) and move to a more accessible location vs. hardcoded CreateCheckoutSession creates a new checkout session for the customer portal and given product and price
func (*StripeClient) CreateCustomer ¶
func (sc *StripeClient) CreateCustomer(email string) (*stripe.Customer, error)
CreateCustomer creates a new customer
func (*StripeClient) CreateSubscription ¶
func (sc *StripeClient) CreateSubscription(params *stripe.SubscriptionParams) (*stripe.Subscription, error)
CreateSubscription creates a new subscription
func (*StripeClient) CreateTrialSubscription ¶
func (sc *StripeClient) CreateTrialSubscription(customerID string) (*Subscription, error)
CreateTrialSubscription creates a trial subscription with the configured price
func (*StripeClient) DeleteCustomer ¶
func (sc *StripeClient) DeleteCustomer(id string) error
DeleteCustomer deletes a customer
func (*StripeClient) GetCustomerByID ¶
func (sc *StripeClient) GetCustomerByID(id string) (*stripe.Customer, error)
GetCustomerByID gets a customer by ID
func (*StripeClient) GetPrices ¶
func (sc *StripeClient) GetPrices() []Price
GetPrices retrieves all prices from stripe which are active and maps them into a []Price struct
func (*StripeClient) GetProductFeatures ¶
func (sc *StripeClient) GetProductFeatures(productID string) []ProductFeature
GetProductFeatures retrieves all product features from stripe which are active and maps them into a []ProductFeature struct
func (*StripeClient) GetProducts ¶
func (sc *StripeClient) GetProducts() []Product
GetProducts retrieves all products from stripe which are active
func (*StripeClient) GetSubscriptionByID ¶
func (sc *StripeClient) GetSubscriptionByID(id string) (*stripe.Subscription, error)
GetSubscriptionByID gets a subscription by ID
func (*StripeClient) ListOrCreateSubscriptions ¶
func (sc *StripeClient) ListOrCreateSubscriptions(customerID string) (*Subscription, error)
ListStripeSubscriptions lists stripe subscriptions by customer
func (*StripeClient) UpdateCustomer ¶
func (sc *StripeClient) UpdateCustomer(id string, params *stripe.CustomerParams) (*stripe.Customer, error)
UpdateCustomer updates a customer
func (*StripeClient) UpdateSubscription ¶
func (sc *StripeClient) UpdateSubscription(id string, params *stripe.SubscriptionParams) (*stripe.Subscription, error)
UpdateSubscription updates a subscription
type StripeOptions ¶
type StripeOptions func(*StripeClient)
StripeOptions is a type for setting options on the Stripe client
func WithAPIKey ¶
func WithAPIKey(apiKey string) StripeOptions
WithAPIKey sets the API key for the Stripe client
func WithTrialSubscriptionPriceID ¶
func WithTrialSubscriptionPriceID(trialSubscriptionPriceID string) StripeOptions
WithTrialSubscriptionPriceID sets the trial subscription price ID for the Stripe client
func WithWebhookSecret ¶
func WithWebhookSecret(webhookSecret string) StripeOptions
WithWebhookSecret sets the webhook secret for the Stripe client
type Subscription ¶
type Subscription struct {
ID string `json:"plan_id" yaml:"plan_id"`
Product string `json:"product_id" yaml:"product_id"`
Price string `json:"price_id" yaml:"price_id"`
StartDate int64 `json:"start_date" yaml:"start_date"`
EndDate int64 `json:"end_date" yaml:"end_date"`
StripeParams *stripe.SubscriptionParams
StripeSubscription []stripe.Subscription
StripeProduct []stripe.Product
StripeFeature []stripe.ProductFeature
Products []Product
Features []Feature
Prices []Price
TrialEnd int64
Status string
StripeCustomerID string
OrganizationID string
DaysUntilDue int64
}
Plan is the recurring context that holds the payment information