Skip to content

Commit 16973cc

Browse files
committed
feat(taxcode): validate add-on tax codes on publish
1 parent 5946f52 commit 16973cc

11 files changed

Lines changed: 42 additions & 14 deletions

File tree

app/common/productcatalog.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ func NewAddonService(
118118
logger *slog.Logger,
119119
db *entdb.Client,
120120
featureResolver productcatalog.FeatureResolver,
121+
taxCodeResolver productcatalog.TaxCodeResolver,
121122
taxCodeService taxcode.Service,
122123
publisher eventbus.Publisher,
123124
) (addon.Service, error) {
@@ -132,6 +133,7 @@ func NewAddonService(
132133
return addonservice.New(addonservice.Config{
133134
Adapter: adapter,
134135
FeatureResolver: featureResolver,
136+
TaxCodeResolver: taxCodeResolver,
135137
TaxCode: taxCodeService,
136138
Logger: logger.With("subsystem", "productcatalog.addon"),
137139
Publisher: publisher,

cmd/billing-worker/wire_gen.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/jobs/internal/wire_gen.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/server/wire_gen.go

Lines changed: 11 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openmeter/productcatalog/addon.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,9 @@ func ValidateAddonWithFeatures(ctx context.Context, resolver NamespacedFeatureRe
332332
return ValidateRateCardsWithFeatures(ctx, resolver)(a.RateCards)
333333
}
334334
}
335+
336+
func ValidateAddonWithTaxCodes(ctx context.Context, resolver NamespacedTaxCodeResolver) models.ValidatorFunc[Addon] {
337+
return func(a Addon) error {
338+
return ValidateRateCardsWithTaxCodes(ctx, resolver)(a.RateCards)
339+
}
340+
}

openmeter/productcatalog/addon/service/addon.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,16 @@ func (s service) PublishAddon(ctx context.Context, params addon.PublishAddonInpu
426426
)
427427
}
428428

429+
// Validate add-on with tax codes
430+
err = pa.ValidateWith(
431+
productcatalog.ValidateAddonWithTaxCodes(ctx, s.taxCodeResolver.WithNamespace(params.Namespace)),
432+
)
433+
if err != nil {
434+
errs = append(errs, fmt.Errorf("invalid add-on [id=%s key=%s version=%d]: %w",
435+
add.ID, add.Key, add.Version, err),
436+
)
437+
}
438+
429439
if err = errors.Join(errs...); err != nil {
430440
return nil, models.NewGenericValidationError(err)
431441
}

openmeter/productcatalog/addon/service/service.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type Config struct {
1717
Publisher eventbus.Publisher
1818

1919
FeatureResolver productcatalog.FeatureResolver
20+
TaxCodeResolver productcatalog.TaxCodeResolver
2021
}
2122

2223
func New(config Config) (addon.Service, error) {
@@ -28,6 +29,10 @@ func New(config Config) (addon.Service, error) {
2829
return nil, errors.New("feature resolver is required")
2930
}
3031

32+
if config.TaxCodeResolver == nil {
33+
return nil, errors.New("tax code resolver is required")
34+
}
35+
3136
if config.TaxCode == nil {
3237
return nil, errors.New("tax code service is required")
3338
}
@@ -47,6 +52,7 @@ func New(config Config) (addon.Service, error) {
4752
publisher: config.Publisher,
4853

4954
featureResolver: config.FeatureResolver,
55+
taxCodeResolver: config.TaxCodeResolver,
5056
}, nil
5157
}
5258

@@ -59,4 +65,5 @@ type service struct {
5965
publisher eventbus.Publisher
6066

6167
featureResolver productcatalog.FeatureResolver
68+
taxCodeResolver productcatalog.TaxCodeResolver
6269
}

openmeter/productcatalog/testutils/env.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ func NewTestEnv(t *testing.T) *TestEnv {
151151
addonService, err := addonservice.New(addonservice.Config{
152152
Adapter: addonAdapter,
153153
FeatureResolver: featureResolver,
154+
TaxCodeResolver: taxCodeResolver,
154155
TaxCode: taxCodeService,
155156
Logger: logger,
156157
Publisher: publisher,

openmeter/subscription/testutils/service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ func NewService(t *testing.T, dbDeps *DBDeps) SubscriptionDependencies {
234234
Logger: logger,
235235
Publisher: publisher,
236236
FeatureResolver: featureResolver,
237+
TaxCodeResolver: taxCodeResolver,
237238
TaxCode: taxCodeService,
238239
})
239240
require.NoError(t, err)

test/billing/subscription_suite.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ func (s *SubscriptionMixin) SetupSuite(t *testing.T, deps SubscriptionMixInDepen
186186
Logger: slog.Default(),
187187
Publisher: publisher,
188188
FeatureResolver: featureResolver,
189+
TaxCodeResolver: taxCodeResolver,
189190
TaxCode: taxCodeService,
190191
})
191192
require.NoError(t, err)

0 commit comments

Comments
 (0)