Skip to content

Commit 73ab596

Browse files
committed
try simplify logic
1 parent 0d400fd commit 73ab596

File tree

4 files changed

+77
-56
lines changed

4 files changed

+77
-56
lines changed

models/user_pinnedrepo.go

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ func (u *User) IsPinnedRepoExist(repoID int64) (isExist bool, err error) {
5656
return x.Exist(&UserPinnedRepo{UID: u.ID, RepoID: repoID})
5757
}
5858

59-
// GetPinnedRepos get pinned repos
60-
func (u *User) GetPinnedRepos(actor *User, excludeRepoIDs []int64, loadAttributes bool) (repos RepositoryList, err error) {
59+
// GetPinnedRepoIDs get repos id
60+
func (u *User) GetPinnedRepoIDs(actor *User) (results []int64, err error) {
6161
var cond = builder.NewCond()
62-
repos = make(RepositoryList, 0, 10)
62+
results = make([]int64, 0, 10)
6363

6464
if actor == nil {
6565
if u.IsOrganization() && u.Visibility != structs.VisibleTypePublic {
@@ -77,19 +77,6 @@ func (u *User) GetPinnedRepos(actor *User, excludeRepoIDs []int64, loadAttribute
7777

7878
cond = cond.And(builder.In("id", idBuilder))
7979

80-
if len(excludeRepoIDs) > 0 {
81-
cond = cond.And(builder.NotIn("id", excludeRepoIDs))
82-
}
83-
84-
if err = x.Where(cond).Find(&repos); err != nil {
85-
return nil, err
86-
}
87-
88-
if loadAttributes {
89-
if err = repos.LoadAttributes(); err != nil {
90-
return nil, err
91-
}
92-
}
93-
80+
err = x.Table("repository").Cols("id").Where(cond).Find(&results)
9481
return
9582
}

models/user_pinnedrepo_test.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,11 @@ func TestGetPinnedRepos(t *testing.T) {
5454

5555
user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
5656

57-
repos, err := user2.GetPinnedRepos(user2, nil, true)
57+
repoIDs, err := user2.GetPinnedRepoIDs(user2)
5858
assert.NoError(t, err)
59-
assert.Equal(t, 3, len(repos))
59+
assert.Equal(t, []int64{1, 4, 16}, repoIDs)
6060

61-
repos, err = user2.GetPinnedRepos(user2, []int64{1}, true)
61+
repoIDs, err = user2.GetPinnedRepoIDs(nil)
6262
assert.NoError(t, err)
63-
assert.Equal(t, 2, len(repos))
64-
65-
repos, err = user2.GetPinnedRepos(nil, []int64{1}, true)
66-
assert.NoError(t, err)
67-
assert.Equal(t, 1, len(repos))
63+
assert.Equal(t, []int64{1, 4}, repoIDs)
6864
}

routers/org/home.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,17 +120,46 @@ func Home(ctx *context.Context) {
120120
}
121121

122122
pinnedRepos := make([]*models.Repository, 0, 10)
123-
has := false
124-
for _, repo := range repos {
125-
if has, err = org.IsPinnedRepoExist(repo.ID); err != nil {
126-
ctx.ServerError("IsPinnedRepoExist", err)
127-
return
123+
pinnedRepoIDs, err := ctx.Org.Organization.GetPinnedRepoIDs(ctx.User)
124+
if err != nil {
125+
ctx.ServerError("GetPinnedRepos", err)
126+
return
127+
}
128+
129+
pinnedRepos2 := make(models.RepositoryList, 0, 5)
130+
for _, pinnedRepoID := range pinnedRepoIDs {
131+
has := false
132+
for _, repo := range repos {
133+
if repo.ID == pinnedRepoID {
134+
has = true
135+
repo.IsPinned = true
136+
pinnedRepos = append(pinnedRepos, repo)
137+
break
138+
}
128139
}
129140

130-
if has {
131-
pinnedRepos = append(pinnedRepos, repo)
132-
repo.IsPinned = true
141+
if !has {
142+
repo, err := models.GetRepositoryByID(pinnedRepoID)
143+
if err != nil {
144+
if !models.IsErrRepoNotExist(err) {
145+
ctx.ServerError("GetRepositoryByID", err)
146+
}
147+
return
148+
}
149+
150+
if repo != nil {
151+
repo.IsPinned = true
152+
pinnedRepos2 = append(pinnedRepos2, repo)
153+
}
154+
}
155+
}
156+
157+
if len(pinnedRepos2) > 0 {
158+
if err = pinnedRepos2.LoadAttributes(); err != nil {
159+
ctx.ServerError("pinnedRepos2.LoadAttributes()", err)
160+
return
133161
}
162+
pinnedRepos = append(pinnedRepos, pinnedRepos2...)
134163
}
135164

136165
ctx.Data["PinnedRepos"] = pinnedRepos

routers/user/profile.go

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -247,35 +247,44 @@ func Profile(ctx *context.Context) {
247247
}
248248

249249
pinnedRepos := make([]*models.Repository, 0, 10)
250-
has := false
251-
for _, repo := range repos {
252-
if has, err = ctxUser.IsPinnedRepoExist(repo.ID); err != nil {
253-
ctx.ServerError("IsPinnedRepoExist", err)
254-
return
255-
}
256-
257-
if has {
258-
pinnedRepos = append(pinnedRepos, repo)
259-
repo.IsPinned = true
260-
}
261-
}
262-
263-
exitsPinnedRepoIDs := make([]int64, 0, len(pinnedRepos))
264-
for _, repo := range pinnedRepos {
265-
exitsPinnedRepoIDs = append(exitsPinnedRepoIDs, repo.ID)
250+
pinnedRepoIDs, err := ctxUser.GetPinnedRepoIDs(ctx.User)
251+
if err != nil {
252+
ctx.ServerError("GetPinnedRepos", err)
253+
return
266254
}
267255

268-
var pinnedRepos2 []*models.Repository
256+
pinnedRepos2 := make(models.RepositoryList, 0, 5)
257+
for _, pinnedRepoID := range pinnedRepoIDs {
258+
has := false
259+
for _, repo := range repos {
260+
if repo.ID == pinnedRepoID {
261+
has = true
262+
repo.IsPinned = true
263+
pinnedRepos = append(pinnedRepos, repo)
264+
break
265+
}
266+
}
269267

270-
pinnedRepos2, err = ctxUser.GetPinnedRepos(ctx.User, exitsPinnedRepoIDs, true)
271-
if err != nil {
272-
ctx.ServerError("GetPinnedRepos(true)", err)
273-
return
268+
if !has {
269+
repo, err := models.GetRepositoryByID(pinnedRepoID)
270+
if err != nil {
271+
if !models.IsErrRepoNotExist(err) {
272+
ctx.ServerError("GetRepositoryByID", err)
273+
}
274+
return
275+
}
276+
277+
if repo != nil {
278+
repo.IsPinned = true
279+
pinnedRepos2 = append(pinnedRepos2, repo)
280+
}
281+
}
274282
}
275283

276284
if len(pinnedRepos2) > 0 {
277-
for _, repo := range pinnedRepos2 {
278-
repo.IsPinned = true
285+
if err = pinnedRepos2.LoadAttributes(); err != nil {
286+
ctx.ServerError("pinnedRepos2.LoadAttributes()", err)
287+
return
279288
}
280289
pinnedRepos = append(pinnedRepos, pinnedRepos2...)
281290
}

0 commit comments

Comments
 (0)