Skip to content

Commit

Permalink
Merge pull request #1178 from openmeterio/refactor/allow-access-to-en…
Browse files Browse the repository at this point in the history
…titlement-value-parser

feat: allow access to entitlement parser
  • Loading branch information
turip authored Jul 9, 2024
2 parents bbf24e9 + d46bebf commit dacff6e
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 31 deletions.
33 changes: 2 additions & 31 deletions internal/entitlement/httpdriver/entitlement.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import (

"github.com/openmeterio/openmeter/api"
"github.com/openmeterio/openmeter/internal/entitlement"
booleanentitlement "github.com/openmeterio/openmeter/internal/entitlement/boolean"
meteredentitlement "github.com/openmeterio/openmeter/internal/entitlement/metered"
staticentitlement "github.com/openmeterio/openmeter/internal/entitlement/static"
"github.com/openmeterio/openmeter/internal/namespace/namespacedriver"
"github.com/openmeterio/openmeter/pkg/clock"
"github.com/openmeterio/openmeter/pkg/convert"
Expand Down Expand Up @@ -181,37 +178,11 @@ func (h *entitlementHandler) GetEntitlementValue() GetEntitlementValueHandler {
}, nil
},
func(ctx context.Context, request GetEntitlementValueHandlerRequest) (api.EntitlementValue, error) {
entitlement, err := h.connector.GetEntitlementValue(ctx, request.Namespace, request.SubjectKey, request.EntitlementIdOrFeatureKey, request.At)
entitlementValue, err := h.connector.GetEntitlementValue(ctx, request.Namespace, request.SubjectKey, request.EntitlementIdOrFeatureKey, request.At)
if err != nil {
return api.EntitlementValue{}, err
}

switch ent := entitlement.(type) {
case *meteredentitlement.MeteredEntitlementValue:
return api.EntitlementValue{
HasAccess: convert.ToPointer(ent.HasAccess()),
Balance: &ent.Balance,
Usage: &ent.UsageInPeriod,
Overage: &ent.Overage,
}, nil
case *staticentitlement.StaticEntitlementValue:
var config *string
if len(ent.Config) > 0 {
config = convert.ToPointer(string(ent.Config))
}

return api.EntitlementValue{
HasAccess: convert.ToPointer(ent.HasAccess()),
Config: config,
}, nil
case *booleanentitlement.BooleanEntitlementValue:
return api.EntitlementValue{
HasAccess: convert.ToPointer(ent.HasAccess()),
}, nil
default:
return api.EntitlementValue{}, errors.New("unknown entitlement type")
}

return MapEntitlementValueToAPI(entitlementValue)
},
commonhttp.JSONResponseEncoder[api.EntitlementValue],
httptransport.AppendOptions(
Expand Down
29 changes: 29 additions & 0 deletions internal/entitlement/httpdriver/parser.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package httpdriver

import (
"errors"
"fmt"

"github.com/openmeterio/openmeter/api"
Expand Down Expand Up @@ -133,6 +134,34 @@ func (p parser) ToAPIGeneric(e *entitlement.Entitlement) (*api.Entitlement, erro
}
}

func MapEntitlementValueToAPI(entitlementValue entitlement.EntitlementValue) (api.EntitlementValue, error) {
switch ent := entitlementValue.(type) {
case *meteredentitlement.MeteredEntitlementValue:
return api.EntitlementValue{
HasAccess: convert.ToPointer(ent.HasAccess()),
Balance: &ent.Balance,
Usage: &ent.UsageInPeriod,
Overage: &ent.Overage,
}, nil
case *staticentitlement.StaticEntitlementValue:
var config *string
if len(ent.Config) > 0 {
config = convert.ToPointer(string(ent.Config))
}

return api.EntitlementValue{
HasAccess: convert.ToPointer(ent.HasAccess()),
Config: config,
}, nil
case *booleanentitlement.BooleanEntitlementValue:
return api.EntitlementValue{
HasAccess: convert.ToPointer(ent.HasAccess()),
}, nil
default:
return api.EntitlementValue{}, errors.New("unknown entitlement type")
}
}

func mapUsagePeriod(u *entitlement.UsagePeriod) *api.RecurringPeriod {
if u == nil {
return nil
Expand Down
5 changes: 5 additions & 0 deletions openmeter/entitlement/httpdriver/handlers.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package httpdriver

import (
"github.com/openmeterio/openmeter/api"
"github.com/openmeterio/openmeter/internal/entitlement/httpdriver"
"github.com/openmeterio/openmeter/openmeter/entitlement"
meteredentitlement "github.com/openmeterio/openmeter/openmeter/entitlement/metered"
Expand Down Expand Up @@ -38,3 +39,7 @@ func NewMeteredEntitlementHandler(
) MeteredEntitlementHandler {
return httpdriver.NewMeteredEntitlementHandler(entitlementConnector, meteredEntitlementConnector, namespaceDecoder, options...)
}

func MapEntitlementValueToAPI(entitlementValue entitlement.EntitlementValue) (api.EntitlementValue, error) {
return httpdriver.MapEntitlementValueToAPI(entitlementValue)
}

0 comments on commit dacff6e

Please sign in to comment.