Skip to content

Commit 23d9f70

Browse files
feat(taxcode): add organization default tax codes HTTP handlers (#4320)
1 parent ef1cc87 commit 23d9f70

6 files changed

Lines changed: 157 additions & 2 deletions

File tree

api/v3/handlers/taxcodes/convert.gen.go

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

api/v3/handlers/taxcodes/convert.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
package taxcodes
33

44
import (
5+
"errors"
6+
57
api "github.com/openmeterio/openmeter/api/v3"
68
"github.com/openmeterio/openmeter/api/v3/labels"
79
"github.com/openmeterio/openmeter/openmeter/app"
@@ -19,6 +21,9 @@ import (
1921
// goverter:extend ToAPIBillingAppType
2022
// goverter:extend ToAPIBillingTaxCodeAppMappings
2123
// goverter:extend ConvertLabelsToMetadata
24+
// goverter:extend IDStringToTaxCodeReference
25+
// goverter:extend InvoicingTaxCodeReferenceToIDString
26+
// goverter:extend CreditGrantTaxCodeReferenceToIDString
2227
var (
2328
// goverter:context namespace
2429
// goverter:map Namespace | NamespaceFromContext
@@ -40,6 +45,19 @@ var (
4045
// goverter:map ManagedModel.DeletedAt DeletedAt
4146
// goverter:map AppMappings | ToAPIBillingTaxCodeAppMappings
4247
ToAPIBillingTaxCode func(taxcode.TaxCode) (api.BillingTaxCode, error)
48+
49+
// goverter:map ManagedModel.CreatedAt CreatedAt
50+
// goverter:map ManagedModel.UpdatedAt UpdatedAt
51+
// goverter:map InvoicingTaxCodeID InvoicingTaxCode | IDStringToTaxCodeReference
52+
// goverter:map CreditGrantTaxCodeID CreditGrantTaxCode | IDStringToTaxCodeReference
53+
ToAPIOrganizationDefaultTaxCodes func(taxcode.OrganizationDefaultTaxCodes) (api.OrganizationDefaultTaxCodes, error)
54+
55+
// goverter:context namespace
56+
// goverter:map Namespace | NamespaceFromContext
57+
// goverter:map InvoicingTaxCode InvoicingTaxCodeID | InvoicingTaxCodeReferenceToIDString
58+
// goverter:map CreditGrantTaxCode CreditGrantTaxCodeID | CreditGrantTaxCodeReferenceToIDString
59+
// goverter:ignore Expand
60+
FromAPIUpdateOrganizationDefaultTaxCodesRequest func(namespace string, body api.UpdateOrganizationDefaultTaxCodesRequest) (taxcode.UpsertOrganizationDefaultTaxCodesInput, error)
4361
)
4462

4563
var ConvertLabelsToMetadata = labels.ToMetadata
@@ -76,6 +94,24 @@ func ToAPIBillingAppType(source app.AppType) api.BillingAppType {
7694
return api.BillingAppType(source)
7795
}
7896

97+
func IDStringToTaxCodeReference(id string) api.TaxCodeReference {
98+
return api.TaxCodeReference{Id: id}
99+
}
100+
101+
func InvoicingTaxCodeReferenceToIDString(ref *api.TaxCodeReference) (string, error) {
102+
if ref == nil || ref.Id == "" {
103+
return "", models.NewGenericValidationError(errors.New("invoicing_tax_code.id is required"))
104+
}
105+
return ref.Id, nil
106+
}
107+
108+
func CreditGrantTaxCodeReferenceToIDString(ref *api.TaxCodeReference) (string, error) {
109+
if ref == nil || ref.Id == "" {
110+
return "", models.NewGenericValidationError(errors.New("credit_grant_tax_code.id is required"))
111+
}
112+
return ref.Id, nil
113+
}
114+
79115
// ToAPIBillingTaxCodeAppMappings converts domain app mappings to API app mappings.
80116
// Ensures that nil is converted to an empty array instead of null.
81117
func ToAPIBillingTaxCodeAppMappings(source taxcode.TaxCodeAppMappings) []api.BillingTaxCodeAppMapping {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package taxcodes
2+
3+
import (
4+
"context"
5+
"net/http"
6+
7+
api "github.com/openmeterio/openmeter/api/v3"
8+
"github.com/openmeterio/openmeter/api/v3/apierrors"
9+
"github.com/openmeterio/openmeter/openmeter/taxcode"
10+
"github.com/openmeterio/openmeter/pkg/framework/commonhttp"
11+
"github.com/openmeterio/openmeter/pkg/framework/transport/httptransport"
12+
)
13+
14+
type (
15+
GetOrganizationDefaultTaxCodesRequest = taxcode.GetOrganizationDefaultTaxCodesInput
16+
GetOrganizationDefaultTaxCodesResponse = api.OrganizationDefaultTaxCodes
17+
GetOrganizationDefaultTaxCodesHandler = httptransport.Handler[GetOrganizationDefaultTaxCodesRequest, GetOrganizationDefaultTaxCodesResponse]
18+
)
19+
20+
func (h *handler) GetOrganizationDefaultTaxCodes() GetOrganizationDefaultTaxCodesHandler {
21+
return httptransport.NewHandler(
22+
func(ctx context.Context, r *http.Request) (GetOrganizationDefaultTaxCodesRequest, error) {
23+
ns, err := h.resolveNamespace(ctx)
24+
if err != nil {
25+
return GetOrganizationDefaultTaxCodesRequest{}, err
26+
}
27+
return GetOrganizationDefaultTaxCodesRequest{Namespace: ns}, nil
28+
},
29+
func(ctx context.Context, request GetOrganizationDefaultTaxCodesRequest) (GetOrganizationDefaultTaxCodesResponse, error) {
30+
cfg, err := h.service.GetOrganizationDefaultTaxCodes(ctx, request)
31+
if err != nil {
32+
return GetOrganizationDefaultTaxCodesResponse{}, err
33+
}
34+
return ToAPIOrganizationDefaultTaxCodes(cfg)
35+
},
36+
commonhttp.JSONResponseEncoderWithStatus[GetOrganizationDefaultTaxCodesResponse](http.StatusOK),
37+
httptransport.AppendOptions(
38+
h.options,
39+
httptransport.WithOperationName("get-organization-default-tax-codes"),
40+
httptransport.WithErrorEncoder(apierrors.GenericErrorEncoder()),
41+
)...,
42+
)
43+
}

api/v3/handlers/taxcodes/handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ type Handler interface {
1313
CreateTaxCode() CreateTaxCodeHandler
1414
UpdateTaxCode() UpdateTaxCodeHandler
1515
DeleteTaxCode() DeleteTaxCodeHandler
16+
17+
GetOrganizationDefaultTaxCodes() GetOrganizationDefaultTaxCodesHandler
18+
UpsertOrganizationDefaultTaxCodes() UpsertOrganizationDefaultTaxCodesHandler
1619
}
1720

1821
type handler struct {
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package taxcodes
2+
3+
import (
4+
"context"
5+
"net/http"
6+
7+
api "github.com/openmeterio/openmeter/api/v3"
8+
"github.com/openmeterio/openmeter/api/v3/apierrors"
9+
"github.com/openmeterio/openmeter/api/v3/request"
10+
"github.com/openmeterio/openmeter/openmeter/taxcode"
11+
"github.com/openmeterio/openmeter/pkg/framework/commonhttp"
12+
"github.com/openmeterio/openmeter/pkg/framework/transport/httptransport"
13+
)
14+
15+
type (
16+
UpsertOrganizationDefaultTaxCodesRequest = taxcode.UpsertOrganizationDefaultTaxCodesInput
17+
UpsertOrganizationDefaultTaxCodesResponse = api.OrganizationDefaultTaxCodes
18+
UpsertOrganizationDefaultTaxCodesHandler = httptransport.Handler[UpsertOrganizationDefaultTaxCodesRequest, UpsertOrganizationDefaultTaxCodesResponse]
19+
)
20+
21+
func (h *handler) UpsertOrganizationDefaultTaxCodes() UpsertOrganizationDefaultTaxCodesHandler {
22+
return httptransport.NewHandler(
23+
func(ctx context.Context, r *http.Request) (UpsertOrganizationDefaultTaxCodesRequest, error) {
24+
body := api.UpdateOrganizationDefaultTaxCodesJSONRequestBody{}
25+
if err := request.ParseBody(r, &body); err != nil {
26+
return UpsertOrganizationDefaultTaxCodesRequest{}, err
27+
}
28+
29+
ns, err := h.resolveNamespace(ctx)
30+
if err != nil {
31+
return UpsertOrganizationDefaultTaxCodesRequest{}, err
32+
}
33+
34+
return FromAPIUpdateOrganizationDefaultTaxCodesRequest(ns, body)
35+
},
36+
func(ctx context.Context, request UpsertOrganizationDefaultTaxCodesRequest) (UpsertOrganizationDefaultTaxCodesResponse, error) {
37+
cfg, err := h.service.UpsertOrganizationDefaultTaxCodes(ctx, request)
38+
if err != nil {
39+
return UpsertOrganizationDefaultTaxCodesResponse{}, err
40+
}
41+
return ToAPIOrganizationDefaultTaxCodes(cfg)
42+
},
43+
commonhttp.JSONResponseEncoderWithStatus[UpsertOrganizationDefaultTaxCodesResponse](http.StatusOK),
44+
httptransport.AppendOptions(
45+
h.options,
46+
httptransport.WithOperationName("upsert-organization-default-tax-codes"),
47+
httptransport.WithErrorEncoder(apierrors.GenericErrorEncoder()),
48+
)...,
49+
)
50+
}

api/v3/server/routes.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,9 +444,9 @@ func (s *Server) ListCustomerCharges(w http.ResponseWriter, r *http.Request, cus
444444
// Organization Default Tax Codes
445445

446446
func (s *Server) GetOrganizationDefaultTaxCodes(w http.ResponseWriter, r *http.Request) {
447-
unimplemented.GetOrganizationDefaultTaxCodes(w, r)
447+
s.taxcodesHandler.GetOrganizationDefaultTaxCodes().ServeHTTP(w, r)
448448
}
449449

450450
func (s *Server) UpdateOrganizationDefaultTaxCodes(w http.ResponseWriter, r *http.Request) {
451-
unimplemented.UpdateOrganizationDefaultTaxCodes(w, r)
451+
s.taxcodesHandler.UpsertOrganizationDefaultTaxCodes().ServeHTTP(w, r)
452452
}

0 commit comments

Comments
 (0)