| package subscriptionworkflow |
|
|
| import ( |
| "context" |
| "errors" |
| "time" |
|
|
| "github.com/openmeterio/openmeter/openmeter/subscription" |
| subscriptionaddon "github.com/openmeterio/openmeter/openmeter/subscription/addon" |
| "github.com/openmeterio/openmeter/pkg/models" |
| ) |
|
|
| type Service interface { |
| CreateFromPlan(ctx context.Context, inp CreateSubscriptionWorkflowInput, plan subscription.Plan) (subscription.SubscriptionView, error) |
| EditRunning(ctx context.Context, subscriptionID models.NamespacedID, customizations []subscription.Patch, timing subscription.Timing) (subscription.SubscriptionView, error) |
| ChangeToPlan(ctx context.Context, subscriptionID models.NamespacedID, inp ChangeSubscriptionWorkflowInput, plan subscription.Plan) (current subscription.Subscription, new subscription.SubscriptionView, err error) |
| Restore(ctx context.Context, subscriptionID models.NamespacedID) (subscription.Subscription, error) |
|
|
| AddAddon(ctx context.Context, subscriptionID models.NamespacedID, addonInp AddAddonWorkflowInput) (subscription.SubscriptionView, subscriptionaddon.SubscriptionAddon, error) |
| ChangeAddonQuantity(ctx context.Context, subscriptionID models.NamespacedID, changeInp ChangeAddonQuantityWorkflowInput) (subscription.SubscriptionView, subscriptionaddon.SubscriptionAddon, error) |
| } |
|
|
| type CreateSubscriptionWorkflowInput struct { |
| ChangeSubscriptionWorkflowInput |
| Namespace string |
| CustomerID string |
|
|
| BillingAnchor *time.Time `json:"billingAnchor,omitempty"` |
| Annotations models.Annotations |
| } |
|
|
| type ChangeSubscriptionWorkflowInput struct { |
| subscription.Timing |
| models.MetadataModel |
| Name string |
| Description *string |
|
|
| BillingAnchor *time.Time `json:"billingAnchor,omitempty"` |
| } |
|
|
| type AddAddonWorkflowInput struct { |
| models.MetadataModel |
|
|
| AddonID string `json:"addonID"` |
|
|
| InitialQuantity int `json:"initialQuantity"` |
|
|
| Timing subscription.Timing `json:"timing"` |
| } |
|
|
| func (i AddAddonWorkflowInput) Validate() error { |
| if i.AddonID == "" { |
| return errors.New("addonID is required") |
| } |
|
|
| if i.InitialQuantity <= 0 { |
| return errors.New("initialQuantity must be greater than 0") |
| } |
|
|
| return nil |
| } |
|
|
| type ChangeAddonQuantityWorkflowInput struct { |
| SubscriptionAddonID models.NamespacedID |
|
|
| Quantity int `json:"quantity"` |
|
|
| Timing subscription.Timing `json:"timing"` |
| } |
|
|
| func (i ChangeAddonQuantityWorkflowInput) Validate() error { |
| return nil |
| } |
|
|