From 9a75a5d59bcf9aaff596a7df36ab3aa5b46477a8 Mon Sep 17 00:00:00 2001 From: Morlinest Date: Fri, 22 Sep 2017 14:53:21 +0200 Subject: [PATCH] Use custom type and constants to hold order by options (#2572) --- models/repo_list.go | 45 +++++++++++++++++++++++++++++------------ routers/home.go | 18 ++++++++--------- routers/user/profile.go | 20 +++++++++--------- 3 files changed, 51 insertions(+), 32 deletions(-) diff --git a/models/repo_list.go b/models/repo_list.go index 15e6144d06..ca7ae9793f 100644 --- a/models/repo_list.go +++ b/models/repo_list.go @@ -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) } diff --git a/routers/home.go b/routers/home.go index 16d0720551..381bdd20ae 100644 --- a/routers/home.go +++ b/routers/home.go @@ -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"), " ") diff --git a/routers/user/profile.go b/routers/user/profile.go index 23f5057727..50d0c2397f 100644 --- a/routers/user/profile.go +++ b/routers/user/profile.go @@ -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