Skip to content

Commit bb04311

Browse files
authored
[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
1 parent fede3cb commit bb04311

File tree

6 files changed

+71
-78
lines changed

6 files changed

+71
-78
lines changed

models/db/search.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ const (
1818
SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC"
1919
SearchOrderByOldest SearchOrderBy = "created_unix ASC"
2020
SearchOrderByNewest SearchOrderBy = "created_unix DESC"
21-
SearchOrderBySize SearchOrderBy = "size ASC"
22-
SearchOrderBySizeReverse SearchOrderBy = "size DESC"
23-
SearchOrderByGitSize SearchOrderBy = "git_size ASC"
24-
SearchOrderByGitSizeReverse SearchOrderBy = "git_size DESC"
25-
SearchOrderByLFSSize SearchOrderBy = "lfs_size ASC"
26-
SearchOrderByLFSSizeReverse SearchOrderBy = "lfs_size DESC"
2721
SearchOrderByID SearchOrderBy = "id ASC"
2822
SearchOrderByIDReverse SearchOrderBy = "id DESC"
2923
SearchOrderByStars SearchOrderBy = "num_stars ASC"

models/repo/repo_list.go

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -207,31 +207,6 @@ type SearchRepoOptions struct {
207207
OnlyShowRelevant bool
208208
}
209209

210-
// SearchOrderBy is used to sort the result
211-
type SearchOrderBy string
212-
213-
func (s SearchOrderBy) String() string {
214-
return string(s)
215-
}
216-
217-
// Strings for sorting result
218-
const (
219-
SearchOrderByAlphabetically SearchOrderBy = "name ASC"
220-
SearchOrderByAlphabeticallyReverse SearchOrderBy = "name DESC"
221-
SearchOrderByLeastUpdated SearchOrderBy = "updated_unix ASC"
222-
SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC"
223-
SearchOrderByOldest SearchOrderBy = "created_unix ASC"
224-
SearchOrderByNewest SearchOrderBy = "created_unix DESC"
225-
SearchOrderBySize SearchOrderBy = "size ASC"
226-
SearchOrderBySizeReverse SearchOrderBy = "size DESC"
227-
SearchOrderByID SearchOrderBy = "id ASC"
228-
SearchOrderByIDReverse SearchOrderBy = "id DESC"
229-
SearchOrderByStars SearchOrderBy = "num_stars ASC"
230-
SearchOrderByStarsReverse SearchOrderBy = "num_stars DESC"
231-
SearchOrderByForks SearchOrderBy = "num_forks ASC"
232-
SearchOrderByForksReverse SearchOrderBy = "num_forks DESC"
233-
)
234-
235210
// UserOwnedRepoCond returns user ownered repositories
236211
func UserOwnedRepoCond(userID int64) builder.Cond {
237212
return builder.Eq{

models/repo/search.go

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,72 @@ package repo
55

66
import "code.gitea.io/gitea/models/db"
77

8+
// Strings for sorting result
9+
const (
10+
// only used for repos
11+
SearchOrderByAlphabetically db.SearchOrderBy = "owner_name ASC, name ASC"
12+
SearchOrderByAlphabeticallyReverse db.SearchOrderBy = "owner_name DESC, name DESC"
13+
SearchOrderBySize db.SearchOrderBy = "size ASC"
14+
SearchOrderBySizeReverse db.SearchOrderBy = "size DESC"
15+
SearchOrderByGitSize db.SearchOrderBy = "git_size ASC"
16+
SearchOrderByGitSizeReverse db.SearchOrderBy = "git_size DESC"
17+
SearchOrderByLFSSize db.SearchOrderBy = "lfs_size ASC"
18+
SearchOrderByLFSSizeReverse db.SearchOrderBy = "lfs_size DESC"
19+
// alias as also used elsewhere
20+
SearchOrderByLeastUpdated db.SearchOrderBy = db.SearchOrderByLeastUpdated
21+
SearchOrderByRecentUpdated db.SearchOrderBy = db.SearchOrderByRecentUpdated
22+
SearchOrderByOldest db.SearchOrderBy = db.SearchOrderByOldest
23+
SearchOrderByNewest db.SearchOrderBy = db.SearchOrderByNewest
24+
SearchOrderByID db.SearchOrderBy = db.SearchOrderByID
25+
SearchOrderByIDReverse db.SearchOrderBy = db.SearchOrderByIDReverse
26+
SearchOrderByStars db.SearchOrderBy = db.SearchOrderByStars
27+
SearchOrderByStarsReverse db.SearchOrderBy = db.SearchOrderByStarsReverse
28+
SearchOrderByForks db.SearchOrderBy = db.SearchOrderByForks
29+
SearchOrderByForksReverse db.SearchOrderBy = db.SearchOrderByForksReverse
30+
)
31+
832
// SearchOrderByMap represents all possible search order
933
var SearchOrderByMap = map[string]map[string]db.SearchOrderBy{
1034
"asc": {
11-
"alpha": "owner_name ASC, name ASC",
12-
"created": db.SearchOrderByOldest,
13-
"updated": db.SearchOrderByLeastUpdated,
14-
"size": db.SearchOrderBySize,
15-
"id": db.SearchOrderByID,
35+
"alpha": SearchOrderByAlphabetically,
36+
"created": SearchOrderByOldest,
37+
"updated": SearchOrderByLeastUpdated,
38+
"size": SearchOrderBySize,
39+
"git_size": SearchOrderByGitSize,
40+
"lfs_size": SearchOrderByLFSSize,
41+
"id": SearchOrderByID,
42+
"stars": SearchOrderByStars,
43+
"forks": SearchOrderByForks,
1644
},
1745
"desc": {
18-
"alpha": "owner_name DESC, name DESC",
19-
"created": db.SearchOrderByNewest,
20-
"updated": db.SearchOrderByRecentUpdated,
21-
"size": db.SearchOrderBySizeReverse,
22-
"id": db.SearchOrderByIDReverse,
46+
"alpha": SearchOrderByAlphabeticallyReverse,
47+
"created": SearchOrderByNewest,
48+
"updated": SearchOrderByRecentUpdated,
49+
"size": SearchOrderBySizeReverse,
50+
"git_size": SearchOrderByGitSizeReverse,
51+
"lfs_size": SearchOrderByLFSSizeReverse,
52+
"id": SearchOrderByIDReverse,
53+
"stars": SearchOrderByStarsReverse,
54+
"forks": SearchOrderByForksReverse,
2355
},
2456
}
57+
58+
// SearchOrderByFlatMap is similar to SearchOrderByMap but use human language keywords
59+
// to decide between asc and desc
60+
var SearchOrderByFlatMap = map[string]db.SearchOrderBy{
61+
"newest": SearchOrderByMap["desc"]["created"],
62+
"oldest": SearchOrderByMap["asc"]["created"],
63+
"leastupdate": SearchOrderByMap["asc"]["updated"],
64+
"reversealphabetically": SearchOrderByMap["desc"]["alpha"],
65+
"alphabetically": SearchOrderByMap["asc"]["alpha"],
66+
"reversesize": SearchOrderByMap["desc"]["size"],
67+
"size": SearchOrderByMap["asc"]["size"],
68+
"reversegitsize": SearchOrderByMap["desc"]["git_size"],
69+
"gitsize": SearchOrderByMap["asc"]["git_size"],
70+
"reverselfssize": SearchOrderByMap["desc"]["lfs_size"],
71+
"lfssize": SearchOrderByMap["asc"]["lfs_size"],
72+
"moststars": SearchOrderByMap["desc"]["stars"],
73+
"feweststars": SearchOrderByMap["asc"]["stars"],
74+
"mostforks": SearchOrderByMap["desc"]["forks"],
75+
"fewestforks": SearchOrderByMap["asc"]["forks"],
76+
}

routers/api/v1/repo/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func Search(ctx *context.APIContext) {
107107
// - name: sort
108108
// in: query
109109
// description: sort repos by attribute. Supported values are
110-
// "alpha", "created", "updated", "size", and "id".
110+
// "alpha", "created", "updated", "size", "git_size", "lfs_size", "stars", "forks" and "id".
111111
// Default is "alpha"
112112
// type: string
113113
// - name: order

routers/web/explore/repo.go

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package explore
66
import (
77
"fmt"
88
"net/http"
9+
"strings"
910

1011
"code.gitea.io/gitea/models/db"
1112
repo_model "code.gitea.io/gitea/models/repo"
@@ -57,47 +58,18 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
5758
orderBy db.SearchOrderBy
5859
)
5960

60-
sortOrder := ctx.FormString("sort")
61+
sortOrder := strings.ToLower(ctx.FormString("sort"))
6162
if sortOrder == "" {
6263
sortOrder = setting.UI.ExploreDefaultSort
6364
}
64-
ctx.Data["SortType"] = sortOrder
6565

66-
switch sortOrder {
67-
case "newest":
68-
orderBy = db.SearchOrderByNewest
69-
case "oldest":
70-
orderBy = db.SearchOrderByOldest
71-
case "leastupdate":
72-
orderBy = db.SearchOrderByLeastUpdated
73-
case "reversealphabetically":
74-
orderBy = db.SearchOrderByAlphabeticallyReverse
75-
case "alphabetically":
76-
orderBy = db.SearchOrderByAlphabetically
77-
case "reversesize":
78-
orderBy = db.SearchOrderBySizeReverse
79-
case "size":
80-
orderBy = db.SearchOrderBySize
81-
case "reversegitsize":
82-
orderBy = db.SearchOrderByGitSizeReverse
83-
case "gitsize":
84-
orderBy = db.SearchOrderByGitSize
85-
case "reverselfssize":
86-
orderBy = db.SearchOrderByLFSSizeReverse
87-
case "lfssize":
88-
orderBy = db.SearchOrderByLFSSize
89-
case "moststars":
90-
orderBy = db.SearchOrderByStarsReverse
91-
case "feweststars":
92-
orderBy = db.SearchOrderByStars
93-
case "mostforks":
94-
orderBy = db.SearchOrderByForksReverse
95-
case "fewestforks":
96-
orderBy = db.SearchOrderByForks
97-
default:
98-
ctx.Data["SortType"] = "recentupdate"
66+
if order, ok := repo_model.SearchOrderByFlatMap[sortOrder]; ok {
67+
orderBy = order
68+
} else {
69+
sortOrder = "recentupdate"
9970
orderBy = db.SearchOrderByRecentUpdated
10071
}
72+
ctx.Data["SortType"] = sortOrder
10173

10274
keyword := ctx.FormTrim("q")
10375

templates/swagger/v1_json.tmpl

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)