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