Skip to content

Commit

Permalink
Use UsagePeriod defaulting as written in docs (#2254)
Browse files Browse the repository at this point in the history
  • Loading branch information
GAlexIHU authored Feb 12, 2025
1 parent 022a088 commit 14791ad
Showing 1 changed file with 35 additions and 21 deletions.
56 changes: 35 additions & 21 deletions openmeter/productcatalog/plan/httpdriver/mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -550,14 +550,22 @@ func AsFlatFeeRateCard(flat api.RateCardFlatFee) (productcatalog.FlatFeeRateCard
},
}

if flat.BillingCadence != nil {
isoString := datex.ISOString(*flat.BillingCadence)
rc.BillingCadence, err = isoString.ParsePtrOrNil()
if err != nil {
return rc, fmt.Errorf("failed to cast BillingCadence: %w", err)
}
}

if flat.FeatureKey != nil {
rc.RateCardMeta.Feature = &feature.Feature{
Key: *flat.FeatureKey,
}
}

if flat.EntitlementTemplate != nil {
tmpl, err := AsEntitlementTemplate(*flat.EntitlementTemplate)
tmpl, err := AsEntitlementTemplate(*flat.EntitlementTemplate, rc.BillingCadence)
if err != nil {
return productcatalog.FlatFeeRateCard{}, fmt.Errorf("failed to cast EntitlementTemplate: %w", err)
}
Expand All @@ -569,14 +577,6 @@ func AsFlatFeeRateCard(flat api.RateCardFlatFee) (productcatalog.FlatFeeRateCard
rc.TaxConfig = lo.ToPtr(AsTaxConfig(*flat.TaxConfig))
}

if flat.BillingCadence != nil {
isoString := datex.ISOString(*flat.BillingCadence)
rc.BillingCadence, err = isoString.ParsePtrOrNil()
if err != nil {
return rc, fmt.Errorf("failed to cast BillingCadence: %w", err)
}
}

if flat.Price != nil {
amount, err := decimal.NewFromString(flat.Price.Amount)
if err != nil {
Expand Down Expand Up @@ -618,14 +618,20 @@ func AsUsageBasedRateCard(usage api.RateCardUsageBased) (productcatalog.UsageBas
},
}

isoString := datex.ISOString(usage.BillingCadence)
rc.BillingCadence, err = isoString.Parse()
if err != nil {
return rc, fmt.Errorf("failed to cast BillingCadence: %w", err)
}

if usage.FeatureKey != nil {
rc.RateCardMeta.Feature = &feature.Feature{
Key: *usage.FeatureKey,
}
}

if usage.EntitlementTemplate != nil {
tmpl, err := AsEntitlementTemplate(*usage.EntitlementTemplate)
tmpl, err := AsEntitlementTemplate(*usage.EntitlementTemplate, &rc.BillingCadence)
if err != nil {
return rc, fmt.Errorf("failed to cast EntitlementTemplate: %w", err)
}
Expand All @@ -637,12 +643,6 @@ func AsUsageBasedRateCard(usage api.RateCardUsageBased) (productcatalog.UsageBas
rc.TaxConfig = lo.ToPtr(AsTaxConfig(*usage.TaxConfig))
}

isoString := datex.ISOString(usage.BillingCadence)
rc.BillingCadence, err = isoString.Parse()
if err != nil {
return rc, fmt.Errorf("failed to cast BillingCadence: %w", err)
}

if usage.Price != nil {
price, err := AsPrice(*usage.Price)
if err != nil {
Expand Down Expand Up @@ -815,7 +815,7 @@ func AsPriceTier(t api.PriceTier) (productcatalog.PriceTier, error) {
return tier, nil
}

func AsEntitlementTemplate(e api.RateCardEntitlement) (*productcatalog.EntitlementTemplate, error) {
func AsEntitlementTemplate(e api.RateCardEntitlement, billingCadence *datex.Period) (*productcatalog.EntitlementTemplate, error) {
tmpl := &productcatalog.EntitlementTemplate{}

eType, err := e.Discriminator()
Expand All @@ -830,10 +830,24 @@ func AsEntitlementTemplate(e api.RateCardEntitlement) (*productcatalog.Entitleme
return nil, fmt.Errorf("failed to cast Metered EntitlementTemplate: %w", err)
}

usagePeriodISO := datex.ISOString(lo.FromPtrOr(metered.UsagePeriod, ""))
usagePeriod, err := usagePeriodISO.Parse()
if err != nil {
return nil, fmt.Errorf("failed to cast UsagePeriod for Metered EntitlementTemplate: %w", err)
var usagePeriod datex.Period

if metered.UsagePeriod != nil {
usagePeriodISO := datex.ISOString(lo.FromPtr(metered.UsagePeriod))

if usagePeriod, err = usagePeriodISO.Parse(); err != nil {
return nil, fmt.Errorf("failed to cast UsagePeriod for Metered EntitlementTemplate: %w", err)
}
}

if usagePeriod.IsZero() {
if billingCadence == nil || billingCadence.IsZero() {
return nil, &models.GenericUserError{
Inner: fmt.Errorf("missing UsagePeriod for Metered EntitlementTemplate where cannot infer from BillingCadence"),
}
}

usagePeriod = *billingCadence
}

meteredTemplate := productcatalog.MeteredEntitlementTemplate{
Expand Down

0 comments on commit 14791ad

Please sign in to comment.