107 lines
2.2 KiB
Go
107 lines
2.2 KiB
Go
package schema
|
|
|
|
const (
|
|
maxPageSize = 1000
|
|
defaultPageSize = 10
|
|
)
|
|
|
|
type PageableQuery struct {
|
|
Size *int `query:"size" oai:"description=返回数据数量;default=10;maximum=1000"`
|
|
Offset *int `query:"offset" oai:"description=数据偏移量;default=0"`
|
|
}
|
|
|
|
func (p *PageableQuery) GetLimit() int {
|
|
if p.Size == nil {
|
|
return defaultPageSize
|
|
}
|
|
if *p.Size >= maxPageSize {
|
|
return maxPageSize
|
|
}
|
|
return *p.Size
|
|
}
|
|
|
|
func (p *PageableQuery) GetOffset() int {
|
|
if p.Offset == nil {
|
|
return 0
|
|
}
|
|
return *p.Offset
|
|
}
|
|
|
|
type SortField struct {
|
|
Field string
|
|
Asc bool
|
|
}
|
|
type SortableQuery struct {
|
|
SortBy *[]string `query:"sort_by" oai:"description=排序字段, 如: +id,-created_at,test 表示依次按照id正序,created_at倒序,test正序"`
|
|
}
|
|
|
|
func (s *SortableQuery) GetOrderField() []SortField {
|
|
if s.SortBy == nil {
|
|
return nil
|
|
}
|
|
fields := make([]SortField, 0, len(*s.SortBy))
|
|
for _, v := range *s.SortBy {
|
|
if v == "" {
|
|
continue
|
|
}
|
|
switch v[0] {
|
|
case '+':
|
|
fields = append(fields, SortField{Field: v[1:], Asc: true})
|
|
case '-':
|
|
fields = append(fields, SortField{Field: v[1:], Asc: false})
|
|
default:
|
|
fields = append(fields, SortField{Field: v, Asc: true})
|
|
}
|
|
}
|
|
|
|
return fields
|
|
}
|
|
|
|
type SortableBody struct {
|
|
SortBy *[]string `json:"sort_by" oai:"description=排序字段, 如: id desc/asc"`
|
|
}
|
|
|
|
func (s *SortableBody) GetOrderField() []SortField {
|
|
if s.SortBy == nil {
|
|
return nil
|
|
}
|
|
fields := make([]SortField, 0, len(*s.SortBy))
|
|
for _, v := range *s.SortBy {
|
|
if v == "" {
|
|
continue
|
|
}
|
|
switch v[0] {
|
|
case '+':
|
|
fields = append(fields, SortField{Field: v[1:], Asc: true})
|
|
case '-':
|
|
fields = append(fields, SortField{Field: v[1:], Asc: false})
|
|
default:
|
|
fields = append(fields, SortField{Field: v, Asc: true})
|
|
}
|
|
}
|
|
|
|
return fields
|
|
}
|
|
|
|
type PageableBody struct {
|
|
Size *int `json:"size" oai:"description=返回数据数量;default=10;maximum=1000"`
|
|
Offset *int `json:"offset" oai:"description=数据偏移量;default=0"`
|
|
}
|
|
|
|
func (p *PageableBody) GetLimit() int {
|
|
if p.Size == nil {
|
|
return defaultPageSize
|
|
}
|
|
if *p.Size >= maxPageSize {
|
|
return maxPageSize
|
|
}
|
|
return *p.Size
|
|
}
|
|
|
|
func (p *PageableBody) GetOffset() int {
|
|
if p.Offset == nil {
|
|
return 0
|
|
}
|
|
return *p.Offset
|
|
}
|