diff options
author | Bo-Yi Wu <appleboy.tw@gmail.com> | 2017-02-14 15:28:22 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-02-14 15:28:22 +0800 |
commit | 23aba523b551d20ee2bbc694ae630989bcdeaccd (patch) | |
tree | 61f0aa0e9a50dcbc924b9d4cacdf3e90936ab7a4 /models/repo.go | |
parent | 7eb8daffa3181f6bae7aac95d536c68c6bed0e33 (diff) | |
download | gitea-23aba523b551d20ee2bbc694ae630989bcdeaccd.tar.gz gitea-23aba523b551d20ee2bbc694ae630989bcdeaccd.zip |
feat: support search bar on star tab of user profile. (#917)
* feat: support search bar on star tab of user profile.
* fix: update testing.
* fix: Using loadAttributes
* fix: remove empty line.
* remove LOWER
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/models/repo.go b/models/repo.go index 7a6eaea215..d83c5fd6ab 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1778,13 +1778,15 @@ type SearchRepoOptions struct { Searcher *User //ID of the person who's seeking OrderBy string Private bool // Include private repositories in results + Starred bool Page int PageSize int // Can be smaller than or equal to setting.ExplorePagingNum } // 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 []*Repository, _ int64, _ error) { +func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, _ int64, _ error) { + var sess *xorm.Session if len(opts.Keyword) == 0 { return repos, 0, nil } @@ -1796,9 +1798,17 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int repos = make([]*Repository, 0, opts.PageSize) + if opts.Starred && opts.OwnerID > 0 { + sess = x. + Join("INNER", "star", "star.repo_id = repository.id"). + Where("star.uid = ?", opts.OwnerID). + And("lower_name LIKE ?", "%"+opts.Keyword+"%") + } else { + sess = x.Where("lower_name LIKE ?", "%"+opts.Keyword+"%") + } + // Append conditions - sess := x.Where("LOWER(lower_name) LIKE ?", "%"+opts.Keyword+"%") - if opts.OwnerID > 0 { + if !opts.Starred && opts.OwnerID > 0 { sess.And("owner_id = ?", opts.OwnerID) } if !opts.Private { @@ -1831,10 +1841,20 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int return nil, 0, fmt.Errorf("Count: %v", err) } - return repos, count, sess. + if err = sess. Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). OrderBy(opts.OrderBy). - Find(&repos) + Find(&repos); err != nil { + return nil, 0, fmt.Errorf("Repo: %v", err) + } + + if opts.Starred { + if err = repos.loadAttributes(x); err != nil { + return nil, 0, fmt.Errorf("LoadAttributes: %v", err) + } + } + + return repos, count, nil } // DeleteRepositoryArchives deletes all repositories' archives. |