diff --git a/models/resources/interfaces.go b/models/resources/interfaces.go index 1a2a20d..57622fd 100755 --- a/models/resources/interfaces.go +++ b/models/resources/interfaces.go @@ -26,6 +26,7 @@ type ResourceInstanceITF interface { GetPricingsProfiles(peerID string, groups []string) []pricing.PricingProfileITF GetPeerGroups() ([]ResourcePartnerITF, []map[string][]string) ClearPeerGroups() + GetSelectedPartnership(peerID string, groups []string) ResourcePartnerITF GetPartnerships(peerID string, groups []string) []ResourcePartnerITF } @@ -33,4 +34,5 @@ type ResourcePartnerITF interface { GetPricingsProfiles(peerID string, groups []string) []pricing.PricingProfileITF GetPeerGroups() map[string][]string ClearPeerGroups() + GetProfile(buying int, strategy int) pricing.PricingProfileITF } diff --git a/models/resources/resource.go b/models/resources/resource.go index e1cbd96..aa956c8 100755 --- a/models/resources/resource.go +++ b/models/resources/resource.go @@ -145,14 +145,16 @@ type GeoPoint struct { type ResourceInstance[T ResourcePartnerITF] struct { utils.AbstractObject - Location GeoPoint `json:"location,omitempty" bson:"location,omitempty"` - Country countries.CountryCode `json:"country,omitempty" bson:"country,omitempty"` - AccessProtocol string `json:"access_protocol,omitempty" bson:"access_protocol,omitempty"` - Env []models.Param `json:"env,omitempty" bson:"env,omitempty"` - Inputs []models.Param `json:"inputs,omitempty" bson:"inputs,omitempty"` - Outputs []models.Param `json:"outputs,omitempty" bson:"outputs,omitempty"` - SelectedPricing pricing.PricingProfileITF `json:"selected_pricing,omitempty" bson:"selected_pricing,omitempty"` - Partnerships []T `json:"partnerships,omitempty" bson:"partnerships,omitempty"` + Location GeoPoint `json:"location,omitempty" bson:"location,omitempty"` + Country countries.CountryCode `json:"country,omitempty" bson:"country,omitempty"` + AccessProtocol string `json:"access_protocol,omitempty" bson:"access_protocol,omitempty"` + Env []models.Param `json:"env,omitempty" bson:"env,omitempty"` + Inputs []models.Param `json:"inputs,omitempty" bson:"inputs,omitempty"` + Outputs []models.Param `json:"outputs,omitempty" bson:"outputs,omitempty"` + SelectedPartnershipIndex int `json:"selected_partnership_index,omitempty" bson:"selected_partnership_index,omitempty"` + SelectedBuyingStrategy int `json:"selected_buying_strategy,omitempty" bson:"selected_buying_strategy,omitempty"` + SelectedStrategy int `json:"selected_strategy,omitempty" bson:"selected_strategy,omitempty"` + Partnerships []T `json:"partnerships,omitempty" bson:"partnerships,omitempty"` } func (ri *ResourceInstance[T]) ClearEnv() { @@ -162,7 +164,18 @@ func (ri *ResourceInstance[T]) ClearEnv() { } func (ri *ResourceInstance[T]) GetProfile() pricing.PricingProfileITF { - return ri.SelectedPricing + if len(ri.Partnerships) > ri.SelectedPartnershipIndex { + prts := ri.Partnerships[ri.SelectedPartnershipIndex] + return prts.GetProfile(ri.SelectedBuyingStrategy, ri.SelectedBuyingStrategy) + } + return nil +} + +func (ri *ResourceInstance[T]) GetSelectedPartnership(peerID string, groups []string) ResourcePartnerITF { + if len(ri.Partnerships) > ri.SelectedPartnershipIndex { + return ri.Partnerships[ri.SelectedPartnershipIndex] + } + return nil } func (ri *ResourceInstance[T]) GetPartnerships(peerID string, groups []string) []ResourcePartnerITF { @@ -210,6 +223,15 @@ type ResourcePartnerShip[T pricing.PricingProfileITF] struct { // to upgrade pricing profiles. to be a map BuyingStrategy, map of Strategy } +func (ri *ResourcePartnerShip[T]) GetProfile(buying int, strategy int) pricing.PricingProfileITF { + if strat, ok := ri.PricingProfiles[buying]; ok { + if profile, ok := strat[strategy]; ok { + return profile + } + } + return nil +} + /* Le pricing doit être selectionné lors d'un scheduling... le type de paiement défini le type de stratégie de paiement diff --git a/models/resources/tests/resource_test.go b/models/resources/tests/resource_test.go index 6f4fbe9..30acd53 100644 --- a/models/resources/tests/resource_test.go +++ b/models/resources/tests/resource_test.go @@ -20,7 +20,10 @@ func (m *MockInstance) GetID() string { return m.ID } func (m *MockInstance) GetName() string { return m.Name } func (m *MockInstance) ClearEnv() {} func (m *MockInstance) ClearPeerGroups() {} -func (m *MockInstance) GetPricingsProfiles(string, []string) []pricing.PricingProfileITF { +func (m *MockInstance) GetProfile() pricing.PricingProfileITF { + return nil +} +func (m *MockInstance) GetPricingsProfiles(peerID string, groups []string) []pricing.PricingProfileITF { return nil } func (m *MockInstance) GetPeerGroups() ([]resources.ResourcePartnerITF, []map[string][]string) { @@ -33,6 +36,10 @@ type MockPartner struct { groups map[string][]string } +func (m *MockPartner) GetProfile(buying int, strategy int) pricing.PricingProfileITF { + return nil +} + func (m *MockPartner) GetPeerGroups() map[string][]string { return m.groups }