Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
micbar committed Feb 21, 2022
1 parent 8d36fc1 commit e8b5263
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 64 deletions.
72 changes: 8 additions & 64 deletions graph/pkg/service/v0/drives.go
Original file line number Diff line number Diff line change
Expand Up @@ -720,71 +720,15 @@ func (g Graph) sortSpaces(req *godata.GoDataRequest, spaces []*libregraph.Drive)
}
switch req.Query.OrderBy.OrderByItems[0].Field.Value {
case "name":
spaces = sortByName(req.Query.OrderBy.OrderByItems[0].Order, spaces)
sort.Sort(spacesByName(spaces))
if req.Query.OrderBy.OrderByItems[0].Order == "asc" {
sort.Sort(sort.Reverse(spacesByName(spaces)))
}
case "lastModifiedDateTime":
spaces = sortByLastModifiedDateTime(req.Query.OrderBy.OrderByItems[0].Order, spaces)
}
return spaces
}

func sortByName(order string, spaces []*libregraph.Drive) []*libregraph.Drive {
if order == "desc" {
sort.Slice(spaces,
func(p, q int) bool {
return *spaces[p].Name > *spaces[q].Name
},
)
}
if order == "asc" {
sort.Slice(spaces,
func(p, q int) bool {
return *spaces[p].Name < *spaces[q].Name
},
)
}
return spaces
}

func sortByLastModifiedDateTime(order string, spaces []*libregraph.Drive) []*libregraph.Drive {
if order == "desc" {
sort.Slice(spaces,
func(p, q int) bool {
// compare the items when both dates are set
if spaces[p].LastModifiedDateTime != nil && spaces[q].LastModifiedDateTime != nil {
return spaces[p].LastModifiedDateTime.After(*spaces[q].LastModifiedDateTime)
}
// move left item down if it has no value
if spaces[p].LastModifiedDateTime == nil && spaces[q].LastModifiedDateTime != nil {
return false
}
// move right item down if it has no value
if spaces[p].LastModifiedDateTime != nil && spaces[q].LastModifiedDateTime == nil {
return true
}
// fallback to name if no dateTime is set on both items
return *spaces[p].Name > *spaces[q].Name
},
)
}
if order == "asc" {
sort.Slice(spaces,
func(p, q int) bool {
// compare the items when both dates are set
if spaces[p].LastModifiedDateTime != nil && spaces[q].LastModifiedDateTime != nil {
return spaces[p].LastModifiedDateTime.Before(*spaces[q].LastModifiedDateTime)
}
// move left item up if it has no value
if spaces[p].LastModifiedDateTime == nil && spaces[q].LastModifiedDateTime != nil {
return true
}
// move right item up if it has no value
if spaces[p].LastModifiedDateTime != nil && spaces[q].LastModifiedDateTime == nil {
return false
}
// fallback to name if no dateTime is set on both items
return *spaces[p].Name < *spaces[q].Name
},
)
sort.Sort(spacesByLastModifiedDateTime(spaces))
if req.Query.OrderBy.OrderByItems[0].Order == "asc" {
sort.Sort(sort.Reverse(spacesByLastModifiedDateTime(spaces)))
}
}
return spaces
}
33 changes: 33 additions & 0 deletions graph/pkg/service/v0/ordering.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package svc

import (
libregraph "github.com/owncloud/libre-graph-api-go"
)

type spacesByName []*libregraph.Drive
type spacesByLastModifiedDateTime []*libregraph.Drive

func (s spacesByName) Len() int { return len(s) }
func (s spacesByName) Less(i, j int) bool {
return *s[i].Name > *s[j].Name
}
func (s spacesByName) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

func (s spacesByLastModifiedDateTime) Len() int { return len(s) }
func (s spacesByLastModifiedDateTime) Less(i, j int) bool {
// compare the items when both dates are set
if s[i].LastModifiedDateTime != nil && s[j].LastModifiedDateTime != nil {
return s[i].LastModifiedDateTime.After(*s[j].LastModifiedDateTime)
}
// move left item down if it has no value
if s[i].LastModifiedDateTime == nil && s[j].LastModifiedDateTime != nil {
return false
}
// move right item down if it has no value
if s[i].LastModifiedDateTime != nil && s[j].LastModifiedDateTime == nil {
return true
}
// fallback to name if no dateTime is set on both items
return *s[i].Name > *s[j].Name
}
func (s spacesByLastModifiedDateTime) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

0 comments on commit e8b5263

Please sign in to comment.