forked from forgejo/forgejo
feat: support paginater on star tab of user profile. (#845)
This commit is contained in:
parent
ceae143e78
commit
b13232f524
5 changed files with 64 additions and 12 deletions
|
@ -71,16 +71,26 @@ func (repo *Repository) GetStargazers(page int) ([]*User, error) {
|
|||
}
|
||||
|
||||
// GetStarredRepos returns the repos the user starred.
|
||||
func (u *User) GetStarredRepos(private bool) (repos []*Repository, err error) {
|
||||
func (u *User) GetStarredRepos(private bool, page, pageSize int, orderBy string) (repos []*Repository, err error) {
|
||||
if len(orderBy) == 0 {
|
||||
orderBy = "star.id"
|
||||
}
|
||||
sess := x.
|
||||
Join("INNER", "star", "star.repo_id = repository.id").
|
||||
Where("star.uid = ?", u.ID).
|
||||
Desc("star.id")
|
||||
Desc(orderBy)
|
||||
|
||||
if !private {
|
||||
sess = sess.And("is_private = ?", false)
|
||||
}
|
||||
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
sess.Limit(pageSize, (page-1)*pageSize)
|
||||
|
||||
repos = make([]*Repository, 0, pageSize)
|
||||
|
||||
if err = sess.Find(&repos); err != nil {
|
||||
return
|
||||
}
|
||||
|
@ -93,3 +103,16 @@ func (u *User) GetStarredRepos(private bool) (repos []*Repository, err error) {
|
|||
|
||||
return
|
||||
}
|
||||
|
||||
// GetStarredRepoCount returns the numbers of repo the user starred.
|
||||
func (u *User) GetStarredRepoCount(private bool) (int64, error) {
|
||||
sess := x.
|
||||
Join("INNER", "star", "star.repo_id = repository.id").
|
||||
Where("star.uid = ?", u.ID)
|
||||
|
||||
if !private {
|
||||
sess = sess.And("is_private = ?", false)
|
||||
}
|
||||
|
||||
return sess.Count(&Repository{})
|
||||
}
|
||||
|
|
|
@ -53,12 +53,12 @@ func TestUser_GetStarredRepos(t *testing.T) {
|
|||
assert.NoError(t, PrepareTestDatabase())
|
||||
|
||||
user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
|
||||
starred, err := user.GetStarredRepos(false)
|
||||
starred, err := user.GetStarredRepos(false, 1, 10, "")
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, starred, 1)
|
||||
assert.Equal(t, int64(4), starred[0].ID)
|
||||
|
||||
starred, err = user.GetStarredRepos(true)
|
||||
starred, err = user.GetStarredRepos(true, 1, 10, "")
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, starred, 2)
|
||||
assert.Equal(t, int64(4), starred[0].ID)
|
||||
|
@ -70,11 +70,24 @@ func TestUser_GetStarredRepos2(t *testing.T) {
|
|||
assert.NoError(t, PrepareTestDatabase())
|
||||
|
||||
user := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User)
|
||||
starred, err := user.GetStarredRepos(false)
|
||||
starred, err := user.GetStarredRepos(false, 1, 10, "")
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, starred, 0)
|
||||
|
||||
starred, err = user.GetStarredRepos(true)
|
||||
starred, err = user.GetStarredRepos(true, 1, 10, "")
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, starred, 0)
|
||||
}
|
||||
|
||||
func TestUserGetStarredRepoCount(t *testing.T) {
|
||||
assert.NoError(t, PrepareTestDatabase())
|
||||
|
||||
user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
|
||||
counts, err := user.GetStarredRepoCount(false)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, int64(1), counts)
|
||||
|
||||
counts, err = user.GetStarredRepoCount(true)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, int64(2), counts)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue