| package addondiff |
|
|
| import ( |
| "github.com/samber/lo" |
|
|
| "github.com/openmeterio/openmeter/openmeter/entitlement" |
| "github.com/openmeterio/openmeter/openmeter/productcatalog" |
| "github.com/openmeterio/openmeter/openmeter/subscription" |
| "github.com/openmeterio/openmeter/pkg/models" |
| ) |
|
|
| |
| |
| type zeroRateCardCheck struct { |
| rc productcatalog.RateCard |
| itemAnnotations models.Annotations |
| } |
|
|
| func (z zeroRateCardCheck) CanDelete() bool { |
| return z.isZeroByContents() && z.isZeroByAnnotations() |
| } |
|
|
| |
| |
| |
| |
| func (z zeroRateCardCheck) isZeroByContents() bool { |
| m := z.rc.AsMeta() |
|
|
| |
| if m.Price != nil { |
| switch m.Price.Type() { |
| case productcatalog.FlatPriceType: |
| f, err := m.Price.AsFlat() |
| if err != nil { |
| return false |
| } |
|
|
| if !f.Amount.IsZero() { |
| return false |
| } |
|
|
| default: |
| return false |
| } |
| } |
|
|
| |
| if m.EntitlementTemplate != nil { |
| switch m.EntitlementTemplate.Type() { |
| case entitlement.EntitlementTypeMetered: |
| mt, err := m.EntitlementTemplate.AsMetered() |
| if err != nil { |
| return false |
| } |
|
|
| if mt.IssueAfterReset != nil && *mt.IssueAfterReset != 0 { |
| return false |
| } |
| case entitlement.EntitlementTypeBoolean: |
| default: |
| return false |
| } |
| } |
|
|
| return true |
| } |
|
|
| |
| func (z zeroRateCardCheck) isZeroByAnnotations() bool { |
| ownerSystems := subscription.AnnotationParser.ListOwnerSubSystems(z.itemAnnotations) |
|
|
| return !lo.Contains(ownerSystems, subscription.OwnerSubscriptionSubSystem) |
| } |
|
|