Ctrl K
ComunidadGuías…

internal/repository/contract/filter.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package contract

import (
	"time"

	ierr "github.com/flexprice/flexprice/internal/errors"
	"github.com/flexprice/flexprice/internal/types"
)

// Filter represents the filter options for contracts
type Filter struct {
	*types.QueryFilter
	*types.TimeRangeFilter

	Filters []*types.FilterCondition `json:"filters,omitempty" form:"filters" validate:"omitempty"`
	Sort    []*types.SortCondition   `json:"sort,omitempty" form:"sort" validate:"omitempty"`

	ContractIDs      []string               `json:"contract_ids,omitempty" form:"contract_ids" validate:"omitempty"`
	CustomerIDs      []string               `json:"customer_ids,omitempty" form:"customer_ids" validate:"omitempty"`
	SubscriptionIDs  []string               `json:"subscription_ids,omitempty" form:"subscription_ids" validate:"omitempty"`
	ContractStatuses []types.ContractStatus `json:"contract_statuses,omitempty" form:"contract_statuses" validate:"omitempty"`
	EndedAtGTE       *time.Time             `json:"ended_at_gte,omitempty" form:"ended_at_gte" validate:"omitempty"`
}

func NewFilter() *Filter {
	return &Filter{QueryFilter: types.NewDefaultQueryFilter()}
}

func (f *Filter) Validate() error {
	if f.QueryFilter != nil {
		if err := f.QueryFilter.Validate(); err != nil {
			return err
		}
	}
	if f.TimeRangeFilter != nil {
		if err := f.TimeRangeFilter.Validate(); err != nil {
			return err
		}
	}
	for _, ids := range [][]string{f.ContractIDs, f.CustomerIDs, f.SubscriptionIDs} {
		for _, id := range ids {
			if id == "" {
				return ierr.NewError("id can not be empty").
					WithHint("Contract, customer and subscription ids can not be empty").
					Mark(ierr.ErrValidation)
			}
		}
	}
	return nil
}

func (f *Filter) queryFilter() *types.QueryFilter {
	if f.QueryFilter == nil {
		return types.NewDefaultQueryFilter()
	}
	return f.QueryFilter
}

func (f *Filter) GetLimit() int           { return f.queryFilter().GetLimit() }
func (f *Filter) GetOffset() int          { return f.queryFilter().GetOffset() }
func (f *Filter) GetSort() string         { return f.queryFilter().GetSort() }
func (f *Filter) GetOrder() string        { return f.queryFilter().GetOrder() }
func (f *Filter) GetStatus() string       { return f.queryFilter().GetStatus() }
func (f *Filter) GetExpand() types.Expand { return f.queryFilter().GetExpand() }
func (f *Filter) IsUnlimited() bool       { return f.queryFilter().IsUnlimited() }