aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2024-06-13 11:13:11 +0200
committerGitHub <noreply@github.com>2024-06-13 09:13:11 +0000
commitbb04311b0b5b7a28f94c4bc409db1c4a04bcef17 (patch)
treef5cf5f635fb4107f524e84b369e2cabcb338f13f /models
parentfede3cbada9edeee6895727cc01c0b28cf4c759a (diff)
downloadgitea-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.go6
-rw-r--r--models/repo/repo_list.go25
-rw-r--r--models/repo/search.go72
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"],
+}