Use custom type and constants to hold order by options (#2572)

This commit is contained in:
Morlinest 2017-09-22 14:53:21 +02:00 committed by Lauris BH
parent ca68a75b5b
commit 9a75a5d59b
3 changed files with 51 additions and 32 deletions

View File

@ -97,14 +97,14 @@ type SearchRepoOptions struct {
// Owner in we search search // Owner in we search search
// //
// in: query // in: query
OwnerID int64 `json:"uid"` OwnerID int64 `json:"uid"`
Searcher *User `json:"-"` //ID of the person who's seeking Searcher *User `json:"-"` //ID of the person who's seeking
OrderBy string `json:"-"` OrderBy SearchOrderBy `json:"-"`
Private bool `json:"-"` // Include private repositories in results Private bool `json:"-"` // Include private repositories in results
Collaborate bool `json:"-"` // Include collaborative repositories Collaborate bool `json:"-"` // Include collaborative repositories
Starred bool `json:"-"` Starred bool `json:"-"`
Page int `json:"-"` Page int `json:"-"`
IsProfile bool `json:"-"` IsProfile bool `json:"-"`
// Limit of result // Limit of result
// //
// maximum: setting.ExplorePagingNum // maximum: setting.ExplorePagingNum
@ -112,6 +112,25 @@ type SearchRepoOptions struct {
PageSize int `json:"limit"` // Can be smaller than or equal to setting.ExplorePagingNum 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, // SearchRepositoryByName takes keyword and part of repository name to search,
// it returns results in given range and number of total results. // it returns results in given range and number of total results.
func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, count int64, err error) { 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 { if len(opts.OrderBy) == 0 {
opts.OrderBy = "name ASC" opts.OrderBy = SearchOrderByAlphabetically
} }
sess := x.NewSession() sess := x.NewSession()
@ -193,7 +212,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
if err = sess. if err = sess.
Where(cond). Where(cond).
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
OrderBy(opts.OrderBy). OrderBy(opts.OrderBy.String()).
Find(&repos); err != nil { Find(&repos); err != nil {
return nil, 0, fmt.Errorf("Repo: %v", err) return nil, 0, fmt.Errorf("Repo: %v", err)
} }
@ -217,7 +236,7 @@ func Repositories(opts *SearchRepoOptions) (_ RepositoryList, count int64, err e
if err = x. if err = x.
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
OrderBy(opts.OrderBy). OrderBy(opts.OrderBy.String()).
Find(&repos); err != nil { Find(&repos); err != nil {
return nil, 0, fmt.Errorf("Repo: %v", err) return nil, 0, fmt.Errorf("Repo: %v", err)
} }
@ -236,7 +255,7 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
var cond = builder.NewCond() var cond = builder.NewCond()
if len(opts.OrderBy) == 0 { if len(opts.OrderBy) == 0 {
opts.OrderBy = "updated_unix DESC" opts.OrderBy = SearchOrderByRecentUpdated
} }
if !opts.Private { if !opts.Private {
@ -270,7 +289,7 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
if err = x.Where(cond). if err = x.Where(cond).
Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
Limit(opts.PageSize). Limit(opts.PageSize).
OrderBy(opts.OrderBy). OrderBy(opts.OrderBy.String()).
Find(&repos); err != nil { Find(&repos); err != nil {
return nil, 0, fmt.Errorf("Repo: %v", err) return nil, 0, fmt.Errorf("Repo: %v", err)
} }

View File

@ -86,27 +86,27 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
repos []*models.Repository repos []*models.Repository
count int64 count int64
err error err error
orderBy string orderBy models.SearchOrderBy
) )
ctx.Data["SortType"] = ctx.Query("sort") ctx.Data["SortType"] = ctx.Query("sort")
switch ctx.Query("sort") { switch ctx.Query("sort") {
case "oldest": case "oldest":
orderBy = "created_unix ASC" orderBy = models.SearchOrderByOldest
case "recentupdate": case "recentupdate":
orderBy = "updated_unix DESC" orderBy = models.SearchOrderByRecentUpdated
case "leastupdate": case "leastupdate":
orderBy = "updated_unix ASC" orderBy = models.SearchOrderByLeastUpdated
case "reversealphabetically": case "reversealphabetically":
orderBy = "name DESC" orderBy = models.SearchOrderByAlphabeticallyReverse
case "alphabetically": case "alphabetically":
orderBy = "name ASC" orderBy = models.SearchOrderByAlphabetically
case "reversesize": case "reversesize":
orderBy = "size DESC" orderBy = models.SearchOrderBySizeReverse
case "size": case "size":
orderBy = "size ASC" orderBy = models.SearchOrderBySize
default: default:
orderBy = "created_unix DESC" orderBy = models.SearchOrderByNewest
} }
keyword := strings.Trim(ctx.Query("q"), " ") keyword := strings.Trim(ctx.Query("q"), " ")

View File

@ -107,26 +107,26 @@ func Profile(ctx *context.Context) {
var ( var (
repos []*models.Repository repos []*models.Repository
count int64 count int64
orderBy string orderBy models.SearchOrderBy
) )
ctx.Data["SortType"] = ctx.Query("sort") ctx.Data["SortType"] = ctx.Query("sort")
switch ctx.Query("sort") { switch ctx.Query("sort") {
case "newest": case "newest":
orderBy = "created_unix DESC" orderBy = models.SearchOrderByNewest
case "oldest": case "oldest":
orderBy = "created_unix ASC" orderBy = models.SearchOrderByOldest
case "recentupdate": case "recentupdate":
orderBy = "updated_unix DESC" orderBy = models.SearchOrderByRecentUpdated
case "leastupdate": case "leastupdate":
orderBy = "updated_unix ASC" orderBy = models.SearchOrderByLeastUpdated
case "reversealphabetically": case "reversealphabetically":
orderBy = "name DESC" orderBy = models.SearchOrderByAlphabeticallyReverse
case "alphabetically": case "alphabetically":
orderBy = "name ASC" orderBy = models.SearchOrderByAlphabetically
default: default:
ctx.Data["SortType"] = "recentupdate" ctx.Data["SortType"] = "recentupdate"
orderBy = "updated_unix DESC" orderBy = models.SearchOrderByNewest
} }
// set default sort value if sort is empty. // set default sort value if sort is empty.
@ -149,7 +149,7 @@ func Profile(ctx *context.Context) {
case "stars": case "stars":
ctx.Data["PageIsProfileStarList"] = true ctx.Data["PageIsProfileStarList"] = true
if len(keyword) == 0 { 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 { if err != nil {
ctx.Handle(500, "GetStarredRepos", err) ctx.Handle(500, "GetStarredRepos", err)
return return
@ -182,7 +182,7 @@ func Profile(ctx *context.Context) {
default: default:
if len(keyword) == 0 { if len(keyword) == 0 {
var total int 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 { if err != nil {
ctx.Handle(500, "GetRepositories", err) ctx.Handle(500, "GetRepositories", err)
return return