93 lines
2.0 KiB
Go
93 lines
2.0 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type BaseFilter struct {
|
|
Page int `query:"page"`
|
|
PageSize int `query:"page_size"`
|
|
SortBy string `query:"sort_by"`
|
|
SortDesc bool `query:"sort_desc"`
|
|
}
|
|
|
|
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"`
|
|
}
|
|
|
|
type ServerBasedFilter struct {
|
|
ServerID string `param:"id"`
|
|
}
|
|
|
|
type ConfigFilter struct {
|
|
BaseFilter
|
|
ServerBasedFilter
|
|
ConfigFile string `query:"config_file"`
|
|
ChangedAt time.Time `query:"changed_at" time_format:"2006-01-02T15:04:05Z07:00"`
|
|
}
|
|
|
|
type ServiceControlFilter struct {
|
|
BaseFilter
|
|
ServiceControl string `query:"serviceControl"`
|
|
}
|
|
|
|
type MembershipFilter struct {
|
|
BaseFilter
|
|
Username string `query:"username"`
|
|
RoleName string `query:"role_name"`
|
|
RoleID string `query:"role_id"`
|
|
}
|
|
|
|
func (f *BaseFilter) Pagination() (offset, limit int) {
|
|
if f.Page < 1 {
|
|
f.Page = 1
|
|
}
|
|
if f.PageSize < 1 {
|
|
f.PageSize = 10
|
|
}
|
|
offset = (f.Page - 1) * f.PageSize
|
|
limit = f.PageSize
|
|
return
|
|
}
|
|
|
|
func (f *BaseFilter) GetSorting() (field string, desc bool) {
|
|
if f.SortBy == "" {
|
|
return "id", false
|
|
}
|
|
return f.SortBy, f.SortDesc
|
|
}
|
|
|
|
func (f *DateRangeFilter) IsDateRangeValid() bool {
|
|
if f.StartDate.IsZero() || f.EndDate.IsZero() {
|
|
return true
|
|
}
|
|
return f.StartDate.Before(f.EndDate)
|
|
}
|
|
|
|
func (f *MembershipFilter) ApplyFilter(query *gorm.DB) *gorm.DB {
|
|
if f.Username != "" {
|
|
query = query.Where("username LIKE ?", "%"+f.Username+"%")
|
|
}
|
|
if f.RoleName != "" {
|
|
query = query.Joins("JOIN roles ON users.role_id = roles.id").Where("roles.name = ?", f.RoleName)
|
|
}
|
|
if f.RoleID != "" {
|
|
if roleUUID, err := uuid.Parse(f.RoleID); err == nil {
|
|
query = query.Where("role_id = ?", roleUUID)
|
|
}
|
|
}
|
|
return query
|
|
}
|
|
|
|
func (f *MembershipFilter) Pagination() (offset, limit int) {
|
|
return f.BaseFilter.Pagination()
|
|
}
|
|
|
|
func (f *MembershipFilter) GetSorting() (field string, desc bool) {
|
|
return f.BaseFilter.GetSorting()
|
|
}
|