package subscription import ( "errors" "fmt" "time" "github.com/openmeterio/openmeter/pkg/filter" "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" "github.com/openmeterio/openmeter/pkg/sortx" "github.com/openmeterio/openmeter/pkg/timeutil" ) type OrderBy string const ( OrderByID OrderBy = "id" OrderByActiveFrom OrderBy = "activeFrom" OrderByActiveTo OrderBy = "activeTo" ) func (o OrderBy) Validate() error { switch o { case OrderByID, OrderByActiveFrom, OrderByActiveTo: return nil } return fmt.Errorf("invalid order by: %s", o) } type ListSubscriptionsInput struct { pagination.Page OrderBy OrderBy Order sortx.Order Namespaces []string CustomerID *filter.FilterULID ActiveAt *time.Time ActiveInPeriod *timeutil.StartBoundedPeriod Status []SubscriptionStatus IncludeDeleted bool ID *filter.FilterULID PlanID *filter.FilterULID PlanKey *filter.FilterString DeletedAt *filter.FilterTime } func (i ListSubscriptionsInput) Validate() error { var errs []error if i.ActiveInPeriod != nil { if err := i.ActiveInPeriod.Validate(); err != nil { errs = append(errs, fmt.Errorf("active in period: %w", err)) } } if i.OrderBy != "" { if err := i.OrderBy.Validate(); err != nil { errs = append(errs, fmt.Errorf("order by: %w", err)) } } if !i.Page.IsZero() { if err := i.Page.Validate(); err != nil { errs = append(errs, fmt.Errorf("page: %w", err)) } } if i.ID != nil { if err := i.ID.Validate(); err != nil { errs = append(errs, models.NewGenericValidationError(fmt.Errorf("invalid id filter: %w", err))) } } if i.CustomerID != nil { if err := i.CustomerID.Validate(); err != nil { errs = append(errs, models.NewGenericValidationError(fmt.Errorf("invalid customer_id filter: %w", err))) } } if i.PlanID != nil { if err := i.PlanID.Validate(); err != nil { errs = append(errs, models.NewGenericValidationError(fmt.Errorf("invalid plan_id filter: %w", err))) } } if i.PlanKey != nil { if err := i.PlanKey.Validate(); err != nil { errs = append(errs, models.NewGenericValidationError(fmt.Errorf("invalid plan_key filter: %w", err))) } } if i.DeletedAt != nil { if err := i.DeletedAt.Validate(); err != nil { errs = append(errs, models.NewGenericValidationError(fmt.Errorf("invalid deleted_at filter: %w", err))) } } return models.NewNillableGenericValidationError(errors.Join(errs...)) } type SubscriptionList = pagination.Result[Subscription]