mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-25 01:10:37 +00:00
Use custom type and constants to hold order by options (#2572)
This commit is contained in:
parent
ca68a75b5b
commit
9a75a5d59b
3 changed files with 51 additions and 32 deletions
|
@ -97,14 +97,14 @@ type SearchRepoOptions struct {
|
|||
// Owner in we search search
|
||||
//
|
||||
// in: query
|
||||
OwnerID int64 `json:"uid"`
|
||||
Searcher *User `json:"-"` //ID of the person who's seeking
|
||||
OrderBy string `json:"-"`
|
||||
Private bool `json:"-"` // Include private repositories in results
|
||||
Collaborate bool `json:"-"` // Include collaborative repositories
|
||||
Starred bool `json:"-"`
|
||||
Page int `json:"-"`
|
||||
IsProfile bool `json:"-"`
|
||||
OwnerID int64 `json:"uid"`
|
||||
Searcher *User `json:"-"` //ID of the person who's seeking
|
||||
OrderBy SearchOrderBy `json:"-"`
|
||||
Private bool `json:"-"` // Include private repositories in results
|
||||
Collaborate bool `json:"-"` // Include collaborative repositories
|
||||
Starred bool `json:"-"`
|
||||
Page int `json:"-"`
|
||||
IsProfile bool `json:"-"`
|
||||
// Limit of result
|
||||
//
|
||||
// maximum: setting.ExplorePagingNum
|
||||
|
@ -112,6 +112,25 @@ type SearchRepoOptions struct {
|
|||
PageSize int `json:"limit"` // Can be smaller than or equal to setting.ExplorePagingNum
|
||||
}
|
||||
|
||||
//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 = "name DESC"
|
||||
SearchOrderByLeastUpdated = "updated_unix ASC"
|
||||
SearchOrderByRecentUpdated = "updated_unix DESC"
|
||||
SearchOrderByOldest = "created_unix ASC"
|
||||
SearchOrderByNewest = "created_unix DESC"
|
||||
SearchOrderBySize = "size ASC"
|
||||
SearchOrderBySizeReverse = "size DESC"
|
||||
)
|
||||
|
||||
// SearchRepositoryByName takes keyword and part of repository name to search,
|
||||
// it returns results in given range and number of total results.
|
||||
func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, count int64, err error) {
|
||||
|
@ -164,7 +183,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
|
|||
}
|
||||
|
||||
if len(opts.OrderBy) == 0 {
|
||||
opts.OrderBy = "name ASC"
|
||||
opts.OrderBy = SearchOrderByAlphabetically
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
|
@ -193,7 +212,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
|
|||
if err = sess.
|
||||
Where(cond).
|
||||
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
|
||||
OrderBy(opts.OrderBy).
|
||||
OrderBy(opts.OrderBy.String()).
|
||||
Find(&repos); err != nil {
|
||||
return nil, 0, fmt.Errorf("Repo: %v", err)
|
||||
}
|
||||
|
@ -217,7 +236,7 @@ func Repositories(opts *SearchRepoOptions) (_ RepositoryList, count int64, err e
|
|||
|
||||
if err = x.
|
||||
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
|
||||
OrderBy(opts.OrderBy).
|
||||
OrderBy(opts.OrderBy.String()).
|
||||
Find(&repos); err != nil {
|
||||
return nil, 0, fmt.Errorf("Repo: %v", err)
|
||||
}
|
||||
|
@ -236,7 +255,7 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
|
|||
var cond = builder.NewCond()
|
||||
|
||||
if len(opts.OrderBy) == 0 {
|
||||
opts.OrderBy = "updated_unix DESC"
|
||||
opts.OrderBy = SearchOrderByRecentUpdated
|
||||
}
|
||||
|
||||
if !opts.Private {
|
||||
|
@ -270,7 +289,7 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
|
|||
if err = x.Where(cond).
|
||||
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
|
||||
Limit(opts.PageSize).
|
||||
OrderBy(opts.OrderBy).
|
||||
OrderBy(opts.OrderBy.String()).
|
||||
Find(&repos); err != nil {
|
||||
return nil, 0, fmt.Errorf("Repo: %v", err)
|
||||
}
|
||||
|
|
|
@ -86,27 +86,27 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
|
|||
repos []*models.Repository
|
||||
count int64
|
||||
err error
|
||||
orderBy string
|
||||
orderBy models.SearchOrderBy
|
||||
)
|
||||
ctx.Data["SortType"] = ctx.Query("sort")
|
||||
|
||||
switch ctx.Query("sort") {
|
||||
case "oldest":
|
||||
orderBy = "created_unix ASC"
|
||||
orderBy = models.SearchOrderByOldest
|
||||
case "recentupdate":
|
||||
orderBy = "updated_unix DESC"
|
||||
orderBy = models.SearchOrderByRecentUpdated
|
||||
case "leastupdate":
|
||||
orderBy = "updated_unix ASC"
|
||||
orderBy = models.SearchOrderByLeastUpdated
|
||||
case "reversealphabetically":
|
||||
orderBy = "name DESC"
|
||||
orderBy = models.SearchOrderByAlphabeticallyReverse
|
||||
case "alphabetically":
|
||||
orderBy = "name ASC"
|
||||
orderBy = models.SearchOrderByAlphabetically
|
||||
case "reversesize":
|
||||
orderBy = "size DESC"
|
||||
orderBy = models.SearchOrderBySizeReverse
|
||||
case "size":
|
||||
orderBy = "size ASC"
|
||||
orderBy = models.SearchOrderBySize
|
||||
default:
|
||||
orderBy = "created_unix DESC"
|
||||
orderBy = models.SearchOrderByNewest
|
||||
}
|
||||
|
||||
keyword := strings.Trim(ctx.Query("q"), " ")
|
||||
|
|
|
@ -107,26 +107,26 @@ func Profile(ctx *context.Context) {
|
|||
var (
|
||||
repos []*models.Repository
|
||||
count int64
|
||||
orderBy string
|
||||
orderBy models.SearchOrderBy
|
||||
)
|
||||
|
||||
ctx.Data["SortType"] = ctx.Query("sort")
|
||||
switch ctx.Query("sort") {
|
||||
case "newest":
|
||||
orderBy = "created_unix DESC"
|
||||
orderBy = models.SearchOrderByNewest
|
||||
case "oldest":
|
||||
orderBy = "created_unix ASC"
|
||||
orderBy = models.SearchOrderByOldest
|
||||
case "recentupdate":
|
||||
orderBy = "updated_unix DESC"
|
||||
orderBy = models.SearchOrderByRecentUpdated
|
||||
case "leastupdate":
|
||||
orderBy = "updated_unix ASC"
|
||||
orderBy = models.SearchOrderByLeastUpdated
|
||||
case "reversealphabetically":
|
||||
orderBy = "name DESC"
|
||||
orderBy = models.SearchOrderByAlphabeticallyReverse
|
||||
case "alphabetically":
|
||||
orderBy = "name ASC"
|
||||
orderBy = models.SearchOrderByAlphabetically
|
||||
default:
|
||||
ctx.Data["SortType"] = "recentupdate"
|
||||
orderBy = "updated_unix DESC"
|
||||
orderBy = models.SearchOrderByNewest
|
||||
}
|
||||
|
||||
// set default sort value if sort is empty.
|
||||
|
@ -149,7 +149,7 @@ func Profile(ctx *context.Context) {
|
|||
case "stars":
|
||||
ctx.Data["PageIsProfileStarList"] = true
|
||||
if len(keyword) == 0 {
|
||||
repos, err = ctxUser.GetStarredRepos(showPrivate, page, setting.UI.User.RepoPagingNum, orderBy)
|
||||
repos, err = ctxUser.GetStarredRepos(showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
|
||||
if err != nil {
|
||||
ctx.Handle(500, "GetStarredRepos", err)
|
||||
return
|
||||
|
@ -182,7 +182,7 @@ func Profile(ctx *context.Context) {
|
|||
default:
|
||||
if len(keyword) == 0 {
|
||||
var total int
|
||||
repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy)
|
||||
repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
|
||||
if err != nil {
|
||||
ctx.Handle(500, "GetRepositories", err)
|
||||
return
|
||||
|
|
Loading…
Reference in a new issue