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 }