slight optimization for GetUserRepositories (#498)
This commit is contained in:
parent
22e1bd31c6
commit
799d0c2030
1 changed files with 11 additions and 8 deletions
|
@ -536,24 +536,28 @@ func (org *User) GetUserTeams(userID int64) ([]*Team, error) {
|
|||
// that the user with the given userID has access to,
|
||||
// and total number of records based on given condition.
|
||||
func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repository, int64, error) {
|
||||
var cond builder.Cond = builder.Eq{
|
||||
"`repository`.owner_id": org.ID,
|
||||
"`repository`.is_private": false,
|
||||
}
|
||||
|
||||
teamIDs, err := org.GetUserTeamIDs(userID)
|
||||
if err != nil {
|
||||
return nil, 0, fmt.Errorf("GetUserTeamIDs: %v", err)
|
||||
}
|
||||
if len(teamIDs) == 0 {
|
||||
// user has no team but "IN ()" is invalid SQL
|
||||
teamIDs = []int64{-1} // there is no repo with id=-1
|
||||
|
||||
if len(teamIDs) > 0 {
|
||||
cond = cond.Or(builder.In("team_repo.team_id", teamIDs))
|
||||
}
|
||||
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
repos := make([]*Repository, 0, pageSize)
|
||||
|
||||
if err := x.
|
||||
Select("`repository`.*").
|
||||
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id").
|
||||
Where("(`repository`.owner_id=? AND `repository`.is_private=?)", org.ID, false).
|
||||
Or(builder.In("team_repo.team_id", teamIDs)).
|
||||
Where(cond).
|
||||
GroupBy("`repository`.id").
|
||||
OrderBy("updated_unix DESC").
|
||||
Limit(pageSize, (page-1)*pageSize).
|
||||
|
@ -563,8 +567,7 @@ func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repos
|
|||
|
||||
repoCount, err := x.
|
||||
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id").
|
||||
Where("(`repository`.owner_id=? AND `repository`.is_private=?)", org.ID, false).
|
||||
Or(builder.In("team_repo.team_id", teamIDs)).
|
||||
Where(cond).
|
||||
GroupBy("`repository`.id").
|
||||
Count(&Repository{})
|
||||
if err != nil {
|
||||
|
|
Reference in a new issue