@@ -13,6 +13,7 @@ import (
1313 entdb "github.com/openmeterio/openmeter/openmeter/ent/db"
1414 appcustomerdb "github.com/openmeterio/openmeter/openmeter/ent/db/appcustomer"
1515 appstripecustomerdb "github.com/openmeterio/openmeter/openmeter/ent/db/appstripecustomer"
16+ billingcustomeroverridedb "github.com/openmeterio/openmeter/openmeter/ent/db/billingcustomeroverride"
1617 customerdb "github.com/openmeterio/openmeter/openmeter/ent/db/customer"
1718 customersubjectsdb "github.com/openmeterio/openmeter/openmeter/ent/db/customersubjects"
1819 plandb "github.com/openmeterio/openmeter/openmeter/ent/db/plan"
@@ -56,18 +57,35 @@ func (a *adapter) ListCustomers(ctx context.Context, input customer.ListCustomer
5657 query = filter .ApplyToQuery (query , input .Name , customerdb .FieldName )
5758 query = filter .ApplyToQuery (query , input .PrimaryEmail , customerdb .FieldPrimaryEmail )
5859
59- if input .Subject != nil {
60- query = query .Where (customerdb .HasSubjectsWith (
61- customersubjectsdb .SubjectKeyContainsFold (* input .Subject ),
62- customersubjectsdb .Or (
63- customersubjectsdb .DeletedAtIsNil (),
64- customersubjectsdb .DeletedAtGTE (now ),
65- ),
66- ))
60+ if input .PlanKey != nil {
61+ applyActiveSubscriptionFilterWithPlanKey (query , now , input .PlanKey )
62+ }
63+
64+ if input .UsageAttributionSubjectKey != nil {
65+ if p := filter .SelectPredicate [predicate.CustomerSubjects ](
66+ filter .Filter (* input .UsageAttributionSubjectKey ),
67+ customersubjectsdb .FieldSubjectKey ,
68+ ); p != nil {
69+ query = query .Where (customerdb .HasSubjectsWith (
70+ * p ,
71+ customersubjectsdb .Or (
72+ customersubjectsdb .DeletedAtIsNil (),
73+ customersubjectsdb .DeletedAtGTE (now ),
74+ ),
75+ ))
76+ }
6777 }
6878
69- if input .PlanKey != nil {
70- applyActiveSubscriptionFilterWithPlanKey (query , now , * input .PlanKey )
79+ if input .BillingProfileID != nil {
80+ if p := filter .SelectPredicate [predicate.BillingCustomerOverride ](
81+ filter .Filter (* input .BillingProfileID ),
82+ billingcustomeroverridedb .FieldBillingProfileID ,
83+ ); p != nil {
84+ query = query .Where (customerdb .HasBillingCustomerOverrideWith (
85+ * p ,
86+ billingcustomeroverridedb .DeletedAtIsNil (),
87+ ))
88+ }
7189 }
7290
7391 if len (input .CustomerIDs ) > 0 {
@@ -751,12 +769,14 @@ func applyActiveSubscriptionFilter(query *entdb.SubscriptionQuery, at time.Time)
751769 query .Where (activeSubscriptionFilter (at )... )
752770}
753771
754- func applyActiveSubscriptionFilterWithPlanKey (query * entdb.CustomerQuery , at time.Time , planKey string ) {
755- predicates := activeSubscriptionFilter (at )
772+ func applyActiveSubscriptionFilterWithPlanKey (query * entdb.CustomerQuery , at time.Time , planKey * filter.FilterString ) {
773+ p := filter .SelectPredicate [predicate.Plan ](filter .Filter (* planKey ), plandb .FieldKey )
774+ if p == nil {
775+ return
776+ }
756777
757- predicates = append (predicates , subscriptiondb .HasPlanWith (
758- plandb .Key (planKey ),
759- ))
778+ predicates := activeSubscriptionFilter (at )
779+ predicates = append (predicates , subscriptiondb .HasPlanWith (* p ))
760780
761781 query .Where (
762782 customerdb .HasSubscriptionWith (predicates ... ),
0 commit comments