@@ -9,11 +9,14 @@ import (
99
1010 v3 "github.com/openmeterio/openmeter/api/v3"
1111 "github.com/openmeterio/openmeter/api/v3/apierrors"
12+ "github.com/openmeterio/openmeter/api/v3/filters"
13+ "github.com/openmeterio/openmeter/api/v3/request"
1214 "github.com/openmeterio/openmeter/api/v3/response"
1315 "github.com/openmeterio/openmeter/openmeter/currencies"
1416 "github.com/openmeterio/openmeter/pkg/framework/commonhttp"
1517 "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport"
1618 "github.com/openmeterio/openmeter/pkg/pagination"
19+ "github.com/openmeterio/openmeter/pkg/sortx"
1720)
1821
1922type (
@@ -49,17 +52,42 @@ func (h *handler) ListCurrencies() ListCurrenciesHandler {
4952 })
5053 }
5154
52- var filterType * currencies.CurrencyType
53- if params .Filter != nil && params .Filter .Type != nil {
54- ft := FromAPIBillingCurrencyType (* params .Filter .Type )
55- filterType = & ft
55+ var orderBy string
56+ var order sortx.Order
57+ if params .Sort != nil {
58+ sort , err := request .ParseSortBy (* params .Sort )
59+ if err != nil {
60+ return ListCurrenciesRequest {}, apierrors .NewBadRequestError (ctx , err , apierrors.InvalidParameters {
61+ {Field : "sort" , Reason : err .Error (), Source : apierrors .InvalidParamSourceQuery },
62+ })
63+ }
64+ orderBy = sort .Field
65+ order = sort .Order .ToSortxOrder ()
66+ }
67+
68+ req := ListCurrenciesRequest {
69+ Page : page ,
70+ Namespace : ns ,
71+ OrderBy : currencies .OrderBy (orderBy ),
72+ Order : order ,
73+ }
74+
75+ if params .Filter != nil {
76+ if params .Filter .Type != nil {
77+ ft := FromAPIBillingCurrencyType (* params .Filter .Type )
78+ req .FilterType = & ft
79+ }
80+
81+ code , err := filters .FromAPIFilterString (params .Filter .Code )
82+ if err != nil {
83+ return ListCurrenciesRequest {}, apierrors .NewBadRequestError (ctx , err , apierrors.InvalidParameters {
84+ {Field : "filter[code]" , Reason : err .Error (), Source : apierrors .InvalidParamSourceQuery },
85+ })
86+ }
87+ req .Code = code
5688 }
5789
58- return ListCurrenciesRequest {
59- Page : page ,
60- Namespace : ns ,
61- FilterType : filterType ,
62- }, nil
90+ return req , nil
6391 },
6492 func (ctx context.Context , request ListCurrenciesRequest ) (ListCurrenciesResponse , error ) {
6593 result , err := h .currencyService .ListCurrencies (ctx , request )
0 commit comments