Skip to content

Commit 7ff39c4

Browse files
committed
Refactor: merge GetMilestones and GetmilestonesByRepoID
1 parent 78cbd0c commit 7ff39c4

File tree

6 files changed

+97
-36
lines changed

6 files changed

+97
-36
lines changed

models/issue_milestone.go

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -330,41 +330,43 @@ func (milestones MilestoneList) getMilestoneIDs() []int64 {
330330
return ids
331331
}
332332

333-
// GetMilestonesByRepoID returns all opened milestones of a repository.
334-
func GetMilestonesByRepoID(repoID int64, state api.StateType, listOptions ListOptions) (MilestoneList, error) {
335-
sess := x.Where("repo_id = ?", repoID)
333+
// GetMilestonesOption contain options to get milestones
334+
type GetMilestonesOption struct {
335+
ListOptions
336+
RepoID int64
337+
State api.StateType
338+
SortType string
339+
}
340+
341+
// GetMilestones returns milestones filtered by GetMilestonesOption's
342+
func GetMilestones(opts GetMilestonesOption) (MilestoneList, error) {
343+
sess := x.NewSession()
344+
defer sess.Close()
345+
if err := sess.Begin(); err != nil {
346+
return nil, err
347+
}
336348

337-
switch state {
349+
if opts.RepoID != 0 {
350+
sess = sess.Where("repo_id = ?", opts.RepoID)
351+
}
352+
353+
switch opts.State {
338354
case api.StateClosed:
339355
sess = sess.And("is_closed = ?", true)
340356

341357
case api.StateAll:
342358
break
343359

344-
case api.StateOpen:
345-
fallthrough
346-
360+
// api.StateOpen:
347361
default:
348362
sess = sess.And("is_closed = ?", false)
349363
}
350364

351-
if listOptions.Page != 0 {
352-
sess = listOptions.setSessionPagination(sess)
365+
if opts.Page != 0 {
366+
sess = opts.setSessionPagination(sess)
353367
}
354368

355-
miles := make([]*Milestone, 0, listOptions.PageSize)
356-
return miles, sess.Asc("deadline_unix").Asc("id").Find(&miles)
357-
}
358-
359-
// GetMilestones returns a list of milestones of given repository and status.
360-
func GetMilestones(repoID int64, page int, isClosed bool, sortType string) (MilestoneList, error) {
361-
miles := make([]*Milestone, 0, setting.UI.IssuePagingNum)
362-
sess := x.Where("repo_id = ? AND is_closed = ?", repoID, isClosed)
363-
if page > 0 {
364-
sess = sess.Limit(setting.UI.IssuePagingNum, (page-1)*setting.UI.IssuePagingNum)
365-
}
366-
367-
switch sortType {
369+
switch opts.SortType {
368370
case "furthestduedate":
369371
sess.Desc("deadline_unix")
370372
case "leastcomplete":
@@ -375,9 +377,13 @@ func GetMilestones(repoID int64, page int, isClosed bool, sortType string) (Mile
375377
sess.Asc("num_issues")
376378
case "mostissues":
377379
sess.Desc("num_issues")
380+
case "id":
381+
sess.Asc("id")
378382
default:
379-
sess.Asc("deadline_unix")
383+
sess.Asc("deadline_unix").Asc("id")
380384
}
385+
386+
miles := make([]*Milestone, 0, opts.PageSize)
381387
return miles, sess.Find(&miles)
382388
}
383389

models/issue_milestone_test.go

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"sort"
99
"testing"
1010

11+
"code.gitea.io/gitea/modules/setting"
1112
api "code.gitea.io/gitea/modules/structs"
1213
"code.gitea.io/gitea/modules/timeutil"
1314

@@ -49,7 +50,10 @@ func TestGetMilestonesByRepoID(t *testing.T) {
4950
assert.NoError(t, PrepareTestDatabase())
5051
test := func(repoID int64, state api.StateType) {
5152
repo := AssertExistsAndLoadBean(t, &Repository{ID: repoID}).(*Repository)
52-
milestones, err := GetMilestonesByRepoID(repo.ID, state, ListOptions{})
53+
milestones, err := GetMilestones(GetMilestonesOption{
54+
RepoID: repo.ID,
55+
State: state,
56+
})
5357
assert.NoError(t, err)
5458

5559
var n int
@@ -83,7 +87,10 @@ func TestGetMilestonesByRepoID(t *testing.T) {
8387
test(3, api.StateClosed)
8488
test(3, api.StateAll)
8589

86-
milestones, err := GetMilestonesByRepoID(NonexistentID, api.StateOpen, ListOptions{})
90+
milestones, err := GetMilestones(GetMilestonesOption{
91+
RepoID: NonexistentID,
92+
State: api.StateOpen,
93+
})
8794
assert.NoError(t, err)
8895
assert.Len(t, milestones, 0)
8996
}
@@ -93,7 +100,15 @@ func TestGetMilestones(t *testing.T) {
93100
repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
94101
test := func(sortType string, sortCond func(*Milestone) int) {
95102
for _, page := range []int{0, 1} {
96-
milestones, err := GetMilestones(repo.ID, page, false, sortType)
103+
milestones, err := GetMilestones(GetMilestonesOption{
104+
ListOptions: ListOptions{
105+
Page: page,
106+
PageSize: setting.UI.IssuePagingNum,
107+
},
108+
RepoID: repo.ID,
109+
State: api.StateOpen,
110+
SortType: sortType,
111+
})
97112
assert.NoError(t, err)
98113
assert.Len(t, milestones, repo.NumMilestones-repo.NumClosedMilestones)
99114
values := make([]int, len(milestones))
@@ -102,7 +117,16 @@ func TestGetMilestones(t *testing.T) {
102117
}
103118
assert.True(t, sort.IntsAreSorted(values))
104119

105-
milestones, err = GetMilestones(repo.ID, page, true, sortType)
120+
milestones, err = GetMilestones(GetMilestonesOption{
121+
ListOptions: ListOptions{
122+
Page: page,
123+
PageSize: setting.UI.IssuePagingNum,
124+
},
125+
RepoID: repo.ID,
126+
State: api.StateClosed,
127+
Name: "",
128+
SortType: sortType,
129+
})
106130
assert.NoError(t, err)
107131
assert.Len(t, milestones, repo.NumClosedMilestones)
108132
values = make([]int, len(milestones))

modules/migrations/gitea_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,17 @@ func TestGiteaUploadRepo(t *testing.T) {
5151
repo := models.AssertExistsAndLoadBean(t, &models.Repository{OwnerID: user.ID, Name: repoName}).(*models.Repository)
5252
assert.True(t, repo.HasUncyclo())
5353

54-
milestones, err := models.GetMilestones(repo.ID, 0, false, "")
54+
milestones, err := models.GetMilestones(models.GetMilestonesOption{
55+
RepoID: repo.ID,
56+
State: structs.StateOpen,
57+
})
5558
assert.NoError(t, err)
5659
assert.EqualValues(t, 1, len(milestones))
5760

58-
milestones, err = models.GetMilestones(repo.ID, 0, true, "")
61+
milestones, err = models.GetMilestones(models.GetMilestonesOption{
62+
RepoID: repo.ID,
63+
State: structs.StateClosed,
64+
})
5965
assert.NoError(t, err)
6066
assert.EqualValues(t, 0, len(milestones))
6167

routers/api/v1/repo/milestone.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,13 @@ func ListMilestones(ctx *context.APIContext) {
5151
// "200":
5252
// "$ref": "#/responses/MilestoneList"
5353

54-
milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID, api.StateType(ctx.Query("state")), utils.GetListOptions(ctx))
54+
milestones, err := models.GetMilestones(models.GetMilestonesOption{
55+
ListOptions: utils.GetListOptions(ctx),
56+
RepoID: ctx.Repo.Repository.ID,
57+
State: api.StateType(ctx.Query("state")),
58+
})
5559
if err != nil {
56-
ctx.Error(http.StatusInternalServerError, "GetMilestonesByRepoID", err)
60+
ctx.Error(http.StatusInternalServerError, "GetMilestones", err)
5761
return
5862
}
5963

routers/repo/issue.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -360,8 +360,11 @@ func Issues(ctx *context.Context) {
360360
issues(ctx, ctx.QueryInt64("milestone"), util.OptionalBoolOf(isPullList))
361361

362362
var err error
363-
// Get milestones.
364-
ctx.Data["Milestones"], err = models.GetMilestonesByRepoID(ctx.Repo.Repository.ID, api.StateType(ctx.Query("state")), models.ListOptions{})
363+
// Get milestones
364+
ctx.Data["Milestones"], err = models.GetMilestones(models.GetMilestonesOption{
365+
RepoID: ctx.Repo.Repository.ID,
366+
State: api.StateType(ctx.Query("state")),
367+
})
365368
if err != nil {
366369
ctx.ServerError("GetAllRepoMilestones", err)
367370
return
@@ -375,12 +378,18 @@ func Issues(ctx *context.Context) {
375378
// RetrieveRepoMilestonesAndAssignees find all the milestones and assignees of a repository
376379
func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repository) {
377380
var err error
378-
ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false, "")
381+
ctx.Data["OpenMilestones"], err = models.GetMilestones(models.GetMilestonesOption{
382+
RepoID: repo.ID,
383+
State: api.StateOpen,
384+
})
379385
if err != nil {
380386
ctx.ServerError("GetMilestones", err)
381387
return
382388
}
383-
ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.ID, -1, true, "")
389+
ctx.Data["ClosedMilestones"], err = models.GetMilestones(models.GetMilestonesOption{
390+
RepoID: repo.ID,
391+
State: api.StateClosed,
392+
})
384393
if err != nil {
385394
ctx.ServerError("GetMilestones", err)
386395
return

routers/repo/milestone.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"code.gitea.io/gitea/modules/context"
1414
"code.gitea.io/gitea/modules/markup/markdown"
1515
"code.gitea.io/gitea/modules/setting"
16+
"code.gitea.io/gitea/modules/structs"
1617
"code.gitea.io/gitea/modules/timeutil"
1718
"code.gitea.io/gitea/modules/util"
1819

@@ -47,13 +48,24 @@ func Milestones(ctx *context.Context) {
4748
}
4849

4950
var total int
51+
var state structs.StateType
5052
if !isShowClosed {
5153
total = int(stats.OpenCount)
54+
state = structs.StateOpen
5255
} else {
5356
total = int(stats.ClosedCount)
57+
state = structs.StateClosed
5458
}
5559

56-
miles, err := models.GetMilestones(ctx.Repo.Repository.ID, page, isShowClosed, sortType)
60+
miles, err := models.GetMilestones(models.GetMilestonesOption{
61+
ListOptions: models.ListOptions{
62+
Page: page,
63+
PageSize: setting.UI.IssuePagingNum,
64+
},
65+
RepoID: ctx.Repo.Repository.ID,
66+
State: state,
67+
SortType: sortType,
68+
})
5769
if err != nil {
5870
ctx.ServerError("GetMilestones", err)
5971
return

0 commit comments

Comments
 (0)