67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// BaseFilter contains common filter fields that can be embedded in other filters
|
|
type BaseFilter struct {
|
|
Page int `query:"page"`
|
|
PageSize int `query:"page_size"`
|
|
SortBy string `query:"sort_by"`
|
|
SortDesc bool `query:"sort_desc"`
|
|
}
|
|
|
|
// DateRangeFilter adds date range filtering capabilities
|
|
type DateRangeFilter struct {
|
|
StartDate time.Time `query:"start_date" time_format:"2006-01-02T15:04:05Z07:00"`
|
|
EndDate time.Time `query:"end_date" time_format:"2006-01-02T15:04:05Z07:00"`
|
|
}
|
|
|
|
// ServerBasedFilter adds server ID filtering capability
|
|
type ServerBasedFilter struct {
|
|
ServerID int `param:"id"`
|
|
}
|
|
|
|
// ConfigFilter defines filtering options for Config queries
|
|
type ConfigFilter struct {
|
|
BaseFilter
|
|
ServerBasedFilter
|
|
ConfigFile string `query:"config_file"`
|
|
ChangedAt time.Time `query:"changed_at" time_format:"2006-01-02T15:04:05Z07:00"`
|
|
}
|
|
|
|
// ApiFilter defines filtering options for Api queries
|
|
type ApiFilter struct {
|
|
BaseFilter
|
|
Api string `query:"api"`
|
|
}
|
|
|
|
// Pagination returns the offset and limit for database queries
|
|
func (f *BaseFilter) Pagination() (offset, limit int) {
|
|
if f.Page < 1 {
|
|
f.Page = 1
|
|
}
|
|
if f.PageSize < 1 {
|
|
f.PageSize = 10 // Default page size
|
|
}
|
|
offset = (f.Page - 1) * f.PageSize
|
|
limit = f.PageSize
|
|
return
|
|
}
|
|
|
|
// GetSorting returns the sort field and direction for database queries
|
|
func (f *BaseFilter) GetSorting() (field string, desc bool) {
|
|
if f.SortBy == "" {
|
|
return "id", false // Default sorting
|
|
}
|
|
return f.SortBy, f.SortDesc
|
|
}
|
|
|
|
// IsDateRangeValid checks if both dates are set and start date is before end date
|
|
func (f *DateRangeFilter) IsDateRangeValid() bool {
|
|
if f.StartDate.IsZero() || f.EndDate.IsZero() {
|
|
return true // If either date is not set, consider it valid
|
|
}
|
|
return f.StartDate.Before(f.EndDate)
|
|
} |