diff options
author | 6543 <6543@obermui.de> | 2024-06-13 11:13:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-13 09:13:11 +0000 |
commit | bb04311b0b5b7a28f94c4bc409db1c4a04bcef17 (patch) | |
tree | f5cf5f635fb4107f524e84b369e2cabcb338f13f /models | |
parent | fede3cbada9edeee6895727cc01c0b28cf4c759a (diff) | |
download | gitea-bb04311b0b5b7a28f94c4bc409db1c4a04bcef17.tar.gz gitea-bb04311b0b5b7a28f94c4bc409db1c4a04bcef17.zip |
[Refactor] Unify repo search order by logic (#30876)
have repo OrderBy definitions defined in one place and use a single type
for OrderBy database options
Diffstat (limited to 'models')
-rw-r--r-- | models/db/search.go | 6 | ||||
-rw-r--r-- | models/repo/repo_list.go | 25 | ||||
-rw-r--r-- | models/repo/search.go | 72 |
3 files changed, 62 insertions, 41 deletions
diff --git a/models/db/search.go b/models/db/search.go index aa577f08e0..37565f45e1 100644 --- a/models/db/search.go +++ b/models/db/search.go @@ -18,12 +18,6 @@ const ( SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC" SearchOrderByOldest SearchOrderBy = "created_unix ASC" SearchOrderByNewest SearchOrderBy = "created_unix DESC" - SearchOrderBySize SearchOrderBy = "size ASC" - SearchOrderBySizeReverse SearchOrderBy = "size DESC" - SearchOrderByGitSize SearchOrderBy = "git_size ASC" - SearchOrderByGitSizeReverse SearchOrderBy = "git_size DESC" - SearchOrderByLFSSize SearchOrderBy = "lfs_size ASC" - SearchOrderByLFSSizeReverse SearchOrderBy = "lfs_size DESC" SearchOrderByID SearchOrderBy = "id ASC" SearchOrderByIDReverse SearchOrderBy = "id DESC" SearchOrderByStars SearchOrderBy = "num_stars ASC" diff --git a/models/repo/repo_list.go b/models/repo/repo_list.go index eacc98e222..e22d872ae4 100644 --- a/models/repo/repo_list.go +++ b/models/repo/repo_list.go @@ -207,31 +207,6 @@ type SearchRepoOptions struct { OnlyShowRelevant bool } -// SearchOrderBy is used to sort the result -type SearchOrderBy string - -func (s SearchOrderBy) String() string { - return string(s) -} - -// Strings for sorting result -const ( - SearchOrderByAlphabetically SearchOrderBy = "name ASC" - SearchOrderByAlphabeticallyReverse SearchOrderBy = "name DESC" - SearchOrderByLeastUpdated SearchOrderBy = "updated_unix ASC" - SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC" - SearchOrderByOldest SearchOrderBy = "created_unix ASC" - SearchOrderByNewest SearchOrderBy = "created_unix DESC" - SearchOrderBySize SearchOrderBy = "size ASC" - SearchOrderBySizeReverse SearchOrderBy = "size DESC" - SearchOrderByID SearchOrderBy = "id ASC" - SearchOrderByIDReverse SearchOrderBy = "id DESC" - SearchOrderByStars SearchOrderBy = "num_stars ASC" - SearchOrderByStarsReverse SearchOrderBy = "num_stars DESC" - SearchOrderByForks SearchOrderBy = "num_forks ASC" - SearchOrderByForksReverse SearchOrderBy = "num_forks DESC" -) - // UserOwnedRepoCond returns user ownered repositories func UserOwnedRepoCond(userID int64) builder.Cond { return builder.Eq{ diff --git a/models/repo/search.go b/models/repo/search.go index 54d6dcfb44..c500d41be8 100644 --- a/models/repo/search.go +++ b/models/repo/search.go @@ -5,20 +5,72 @@ package repo import "code.gitea.io/gitea/models/db" +// Strings for sorting result +const ( + // only used for repos + SearchOrderByAlphabetically db.SearchOrderBy = "owner_name ASC, name ASC" + SearchOrderByAlphabeticallyReverse db.SearchOrderBy = "owner_name DESC, name DESC" + SearchOrderBySize db.SearchOrderBy = "size ASC" + SearchOrderBySizeReverse db.SearchOrderBy = "size DESC" + SearchOrderByGitSize db.SearchOrderBy = "git_size ASC" + SearchOrderByGitSizeReverse db.SearchOrderBy = "git_size DESC" + SearchOrderByLFSSize db.SearchOrderBy = "lfs_size ASC" + SearchOrderByLFSSizeReverse db.SearchOrderBy = "lfs_size DESC" + // alias as also used elsewhere + SearchOrderByLeastUpdated db.SearchOrderBy = db.SearchOrderByLeastUpdated + SearchOrderByRecentUpdated db.SearchOrderBy = db.SearchOrderByRecentUpdated + SearchOrderByOldest db.SearchOrderBy = db.SearchOrderByOldest + SearchOrderByNewest db.SearchOrderBy = db.SearchOrderByNewest + SearchOrderByID db.SearchOrderBy = db.SearchOrderByID + SearchOrderByIDReverse db.SearchOrderBy = db.SearchOrderByIDReverse + SearchOrderByStars db.SearchOrderBy = db.SearchOrderByStars + SearchOrderByStarsReverse db.SearchOrderBy = db.SearchOrderByStarsReverse + SearchOrderByForks db.SearchOrderBy = db.SearchOrderByForks + SearchOrderByForksReverse db.SearchOrderBy = db.SearchOrderByForksReverse +) + // SearchOrderByMap represents all possible search order var SearchOrderByMap = map[string]map[string]db.SearchOrderBy{ "asc": { - "alpha": "owner_name ASC, name ASC", - "created": db.SearchOrderByOldest, - "updated": db.SearchOrderByLeastUpdated, - "size": db.SearchOrderBySize, - "id": db.SearchOrderByID, + "alpha": SearchOrderByAlphabetically, + "created": SearchOrderByOldest, + "updated": SearchOrderByLeastUpdated, + "size": SearchOrderBySize, + "git_size": SearchOrderByGitSize, + "lfs_size": SearchOrderByLFSSize, + "id": SearchOrderByID, + "stars": SearchOrderByStars, + "forks": SearchOrderByForks, }, "desc": { - "alpha": "owner_name DESC, name DESC", - "created": db.SearchOrderByNewest, - "updated": db.SearchOrderByRecentUpdated, - "size": db.SearchOrderBySizeReverse, - "id": db.SearchOrderByIDReverse, + "alpha": SearchOrderByAlphabeticallyReverse, + "created": SearchOrderByNewest, + "updated": SearchOrderByRecentUpdated, + "size": SearchOrderBySizeReverse, + "git_size": SearchOrderByGitSizeReverse, + "lfs_size": SearchOrderByLFSSizeReverse, + "id": SearchOrderByIDReverse, + "stars": SearchOrderByStarsReverse, + "forks": SearchOrderByForksReverse, }, } + +// SearchOrderByFlatMap is similar to SearchOrderByMap but use human language keywords +// to decide between asc and desc +var SearchOrderByFlatMap = map[string]db.SearchOrderBy{ + "newest": SearchOrderByMap["desc"]["created"], + "oldest": SearchOrderByMap["asc"]["created"], + "leastupdate": SearchOrderByMap["asc"]["updated"], + "reversealphabetically": SearchOrderByMap["desc"]["alpha"], + "alphabetically": SearchOrderByMap["asc"]["alpha"], + "reversesize": SearchOrderByMap["desc"]["size"], + "size": SearchOrderByMap["asc"]["size"], + "reversegitsize": SearchOrderByMap["desc"]["git_size"], + "gitsize": SearchOrderByMap["asc"]["git_size"], + "reverselfssize": SearchOrderByMap["desc"]["lfs_size"], + "lfssize": SearchOrderByMap["asc"]["lfs_size"], + "moststars": SearchOrderByMap["desc"]["stars"], + "feweststars": SearchOrderByMap["asc"]["stars"], + "mostforks": SearchOrderByMap["desc"]["forks"], + "fewestforks": SearchOrderByMap["asc"]["forks"], +} |