| package chargeadapter |
|
|
| import ( |
| "github.com/samber/lo" |
|
|
| chargecreditpurchase "github.com/openmeterio/openmeter/openmeter/billing/charges/creditpurchase" |
| chargeflatfee "github.com/openmeterio/openmeter/openmeter/billing/charges/flatfee" |
| "github.com/openmeterio/openmeter/openmeter/billing/charges/meta" |
| chargeusagebased "github.com/openmeterio/openmeter/openmeter/billing/charges/usagebased" |
| "github.com/openmeterio/openmeter/openmeter/ledger" |
| "github.com/openmeterio/openmeter/pkg/models" |
| ) |
|
|
| func chargeAnnotationsForCreditPurchaseCharge(charge chargecreditpurchase.Charge) models.Annotations { |
| return chargeTransactionAnnotations( |
| models.NamespacedID{ |
| Namespace: charge.Namespace, |
| ID: charge.ID, |
| }, |
| charge.Intent.Subscription, |
| nil, |
| ) |
| } |
|
|
| func chargeAnnotationsForFlatFeeCharge(charge chargeflatfee.Charge) models.Annotations { |
| return chargeTransactionAnnotations( |
| models.NamespacedID{ |
| Namespace: charge.Namespace, |
| ID: charge.ID, |
| }, |
| charge.Intent.GetSubscription(), |
| charge.State.FeatureID, |
| ) |
| } |
|
|
| func chargeAnnotationsForUsageBasedCharge(charge chargeusagebased.Charge) models.Annotations { |
| return chargeTransactionAnnotations( |
| models.NamespacedID{ |
| Namespace: charge.Namespace, |
| ID: charge.ID, |
| }, |
| charge.Intent.GetSubscription(), |
| lo.EmptyableToPtr(charge.State.FeatureID), |
| ) |
| } |
|
|
| func chargeTransactionAnnotations(chargeID models.NamespacedID, subscription *meta.SubscriptionReference, featureID *string) models.Annotations { |
| var subscriptionID *string |
| var subscriptionPhaseID *string |
| var subscriptionItemID *string |
|
|
| if subscription != nil { |
| subscriptionID = &subscription.SubscriptionID |
| subscriptionPhaseID = &subscription.PhaseID |
| subscriptionItemID = &subscription.ItemID |
| } |
|
|
| return ledger.ChargeTransactionAnnotations(ledger.ChargeTransactionAnnotationsInput{ |
| ChargeID: chargeID, |
| SubscriptionID: subscriptionID, |
| SubscriptionPhaseID: subscriptionPhaseID, |
| SubscriptionItemID: subscriptionItemID, |
| FeatureID: featureID, |
| }) |
| } |
|
|