github.com/timoth-y/kicksware-api/order-service@v0.0.0-20201002192818-87b546a7ae5a/usecase/business/orderSorter.go (about) 1 package business 2 3 import ( 4 "sort" 5 "strings" 6 7 "github.com/timoth-y/kicksware-api/order-service/core/model" 8 ) 9 10 type OrderSorter struct { 11 items []*model.Order 12 property string 13 } 14 15 func NewSorter(items []*model.Order, property string) (s *OrderSorter) { 16 s = &OrderSorter{} 17 s.items = items 18 s.property = property 19 return s 20 } 21 func (s *OrderSorter) Len() int { return len(s.items) } 22 func (s *OrderSorter) Swap(i, j int) { s.items[i], s.items[j] = s.items[j], s.items[i] } 23 func (s *OrderSorter) Less(i, j int) bool { 24 switch strings.ToLower(s.property) { 25 case "price": 26 return s.items[i].Price < s.items[j].Price 27 case "released": 28 return s.items[i].OrderedAt.Sub(s.items[j].OrderedAt).Hours() < 0 29 default: 30 return s.items[i].UniqueID < s.items[j].UniqueID 31 } 32 } 33 func (s *OrderSorter) Asc() []*model.Order { 34 sort.Sort(s) 35 return s.items 36 } 37 38 func (s *OrderSorter) Desc() []*model.Order { 39 sort.Sort(sort.Reverse(s)) 40 return s.items 41 } 42 43 func (s *OrderSorter) Sort(desc bool) []*model.Order { 44 if desc { 45 return s.Desc() 46 } 47 return s.Asc(); 48 } 49