package pricing import ( "time" ) type PricingProfileITF interface { GetPrice(quantity float64, val float64, start time.Time, end time.Time, params ...string) (float64, error) IsPurchased() bool GetOverrideStrategyValue() int } type RefundType int const ( REFUND_DEAD_END RefundType = iota REFUND_ON_ERROR REFUND_ON_EARLY_END ) type AccessPricingProfile[T Strategy] struct { // only use for acces such as : DATA && PROCESSING Pricing PricingStrategy[T] `json:"pricing,omitempty" bson:"pricing,omitempty"` // Price is the price of the resource DefaultRefund RefundType `json:"default_refund" bson:"default_refund"` // DefaultRefund is the default refund type of the pricing RefundRatio int32 `json:"refund_ratio" bson:"refund_ratio" default:"0"` // RefundRatio is the refund ratio if missing } func (b *AccessPricingProfile[T]) GetOverrideStrategyValue() int { return -1 } type ExploitPrivilegeStrategy int const ( BASIC ExploitPrivilegeStrategy = iota GARANTED_ON_DELAY GARANTED ) func (t ExploitPrivilegeStrategy) String() string { return [...]string{"BASIC", "GARANTED_ON_DELAY", "GARANTED"}[t] } type ExploitPricingProfile[T Strategy] struct { // only use for exploit such as : STORAGE, COMPUTE, WORKFLOW AccessPricingProfile[T] AdditionnalRefundTypes []RefundType `json:"refund_types" bson:"refund_types"` // RefundTypes is the refund types of the pricing PrivilegeStrategy ExploitPrivilegeStrategy `json:"privilege_strategy,omitempty" bson:"privilege_strategy,omitempty"` // Strategy is the strategy of the pricing GarantedDelaySecond uint `json:"garanted_delay_second,omitempty" bson:"garanted_delay_second,omitempty"` // GarantedDelaySecond is the garanted delay of the pricing Exceeding bool `json:"exceeding" bson:"exceeding"` // Exceeding is the exceeding of the bill ExceedingRatio int32 `json:"exceeding_ratio" bson:"exceeding_ratio" default:"0"` // ExceedingRatio is the exceeding ratio of the bill }