2024-12-12 16:25:47 +01:00
package pricing
import (
"time"
)
type PricingProfileITF interface {
2025-06-20 07:51:32 +02:00
IsBooked ( ) bool
2025-06-20 12:10:36 +02:00
IsPurchasable ( ) bool
GetPurchase ( ) BuyingStrategy
2024-12-12 16:25:47 +01:00
GetOverrideStrategyValue ( ) int
2026-01-13 16:04:31 +01:00
GetPriceHT ( quantity float64 , val float64 , start time . Time , end time . Time , variation [ ] * PricingVariation , params ... string ) ( float64 , error )
2024-12-12 16:25:47 +01:00
}
type RefundType int
const (
REFUND_DEAD_END RefundType = iota
REFUND_ON_ERROR
REFUND_ON_EARLY_END
)
2025-01-17 10:34:44 +01:00
func ( t RefundType ) String ( ) string {
return [ ... ] string { "REFUND ON DEAD END" , "REFUND ON ERROR" , "REFUND ON EARLY END" } [ t ]
}
func RefundTypeList ( ) [ ] RefundType {
return [ ] RefundType { REFUND_DEAD_END , REFUND_ON_ERROR , REFUND_ON_EARLY_END }
}
2024-12-16 12:17:20 +01:00
type AccessPricingProfile [ T Strategy ] struct { // only use for acces such as : DATA && PROCESSING
2025-01-14 11:28:16 +01:00
Pricing PricingStrategy [ T ] ` json:"pricing,omitempty" bson:"pricing,omitempty" ` // Price is the price of the resource
2024-12-16 12:17:20 +01:00
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
2024-12-12 16:25:47 +01:00
}
2026-01-13 16:04:31 +01:00
func ( a AccessPricingProfile [ T ] ) IsBooked ( ) bool {
return a . Pricing . BuyingStrategy == SUBSCRIPTION
}
func ( a AccessPricingProfile [ T ] ) IsPurchasable ( ) bool {
return a . Pricing . BuyingStrategy == PERMANENT
}
func ( a AccessPricingProfile [ T ] ) GetPurchase ( ) BuyingStrategy {
return a . Pricing . BuyingStrategy
}
func ( a AccessPricingProfile [ T ] ) GetPriceHT ( quantity float64 , val float64 , start time . Time , end time . Time , variations [ ] * PricingVariation , params ... string ) ( float64 , error ) {
return a . Pricing . GetPriceHT ( quantity , val , start , & end , variations )
}
2024-12-16 12:17:20 +01:00
func ( b * AccessPricingProfile [ T ] ) GetOverrideStrategyValue ( ) int {
2024-12-12 16:25:47 +01:00
return - 1
}
2026-01-13 16:04:31 +01:00
func GetDefaultPricingProfile ( ) PricingProfileITF {
return & AccessPricingProfile [ TimePricingStrategy ] {
Pricing : PricingStrategy [ TimePricingStrategy ] {
Price : 0 ,
Currency : "EUR" ,
BuyingStrategy : PERMANENT ,
TimePricingStrategy : ONCE ,
} ,
}
}
2024-12-16 12:17:20 +01:00
type ExploitPrivilegeStrategy int
2024-12-12 16:25:47 +01:00
const (
2024-12-16 12:17:20 +01:00
BASIC ExploitPrivilegeStrategy = iota
2024-12-12 16:25:47 +01:00
GARANTED_ON_DELAY
GARANTED
)
2025-01-17 10:34:44 +01:00
func ExploitPrivilegeStrategyList ( ) [ ] ExploitPrivilegeStrategy {
return [ ] ExploitPrivilegeStrategy { BASIC , GARANTED_ON_DELAY , GARANTED }
}
2024-12-16 12:17:20 +01:00
func ( t ExploitPrivilegeStrategy ) String ( ) string {
2025-01-17 10:34:44 +01:00
return [ ... ] string { "NO GARANTY" , "GARANTED ON SPECIFIC DELAY" , "GARANTED" } [ t ]
2024-12-12 16:25:47 +01:00
}
2024-12-16 12:17:20 +01:00
type ExploitPricingProfile [ T Strategy ] struct { // only use for exploit such as : STORAGE, COMPUTE, WORKFLOW
AccessPricingProfile [ T ]
2024-12-12 16:25:47 +01:00
AdditionnalRefundTypes [ ] RefundType ` json:"refund_types" bson:"refund_types" ` // RefundTypes is the refund types of the pricing
2025-01-14 11:28:16 +01:00
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
2024-12-12 16:25:47 +01:00
2025-01-14 11:28:16 +01:00
Exceeding bool ` json:"exceeding" bson:"exceeding" ` // Exceeding is the exceeding of the bill
2024-12-12 16:25:47 +01:00
ExceedingRatio int32 ` json:"exceeding_ratio" bson:"exceeding_ratio" default:"0" ` // ExceedingRatio is the exceeding ratio of the bill
}