aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/fixtures/project.yml8
-rw-r--r--models/project/project.go28
-rw-r--r--models/project/project_test.go39
-rw-r--r--routers/web/org/projects.go2
-rw-r--r--routers/web/repo/projects.go2
5 files changed, 64 insertions, 15 deletions
diff --git a/models/fixtures/project.yml b/models/fixtures/project.yml
index 3fa4286c53..1bf8030f6a 100644
--- a/models/fixtures/project.yml
+++ b/models/fixtures/project.yml
@@ -7,6 +7,8 @@
creator_id: 2
board_type: 1
type: 2
+ created_unix: 1688973030
+ updated_unix: 1688973030
-
id: 2
@@ -17,6 +19,8 @@
creator_id: 3
board_type: 1
type: 2
+ created_unix: 1688973010
+ updated_unix: 1688973010
-
id: 3
@@ -27,6 +31,8 @@
creator_id: 5
board_type: 1
type: 2
+ created_unix: 1688973020
+ updated_unix: 1688973020
-
id: 4
@@ -37,3 +43,5 @@
creator_id: 2
board_type: 1
type: 2
+ created_unix: 1688973000
+ updated_unix: 1688973000
diff --git a/models/project/project.go b/models/project/project.go
index 44609e60b2..6fa2adf604 100644
--- a/models/project/project.go
+++ b/models/project/project.go
@@ -196,7 +196,7 @@ type SearchOptions struct {
RepoID int64
Page int
IsClosed util.OptionalBool
- SortType string
+ OrderBy db.SearchOrderBy
Type Type
}
@@ -226,26 +226,28 @@ func CountProjects(ctx context.Context, opts SearchOptions) (int64, error) {
return db.GetEngine(ctx).Where(opts.toConds()).Count(new(Project))
}
+func GetSearchOrderByBySortType(sortType string) db.SearchOrderBy {
+ switch sortType {
+ case "oldest":
+ return db.SearchOrderByOldest
+ case "recentupdate":
+ return db.SearchOrderByRecentUpdated
+ case "leastupdate":
+ return db.SearchOrderByLeastUpdated
+ default:
+ return db.SearchOrderByNewest
+ }
+}
+
// FindProjects returns a list of all projects that have been created in the repository
func FindProjects(ctx context.Context, opts SearchOptions) ([]*Project, int64, error) {
- e := db.GetEngine(ctx).Where(opts.toConds())
+ e := db.GetEngine(ctx).Where(opts.toConds()).OrderBy(opts.OrderBy.String())
projects := make([]*Project, 0, setting.UI.IssuePagingNum)
if opts.Page > 0 {
e = e.Limit(setting.UI.IssuePagingNum, (opts.Page-1)*setting.UI.IssuePagingNum)
}
- switch opts.SortType {
- case "oldest":
- e.Desc("created_unix")
- case "recentupdate":
- e.Desc("updated_unix")
- case "leastupdate":
- e.Asc("updated_unix")
- default:
- e.Asc("created_unix")
- }
-
count, err := e.FindAndCount(&projects)
return projects, count, err
}
diff --git a/models/project/project_test.go b/models/project/project_test.go
index 71ceda7aa5..d1a4715653 100644
--- a/models/project/project_test.go
+++ b/models/project/project_test.go
@@ -82,3 +82,42 @@ func TestProject(t *testing.T) {
assert.True(t, projectFromDB.IsClosed)
}
+
+func TestProjectsSort(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ tests := []struct {
+ sortType string
+ wants []int64
+ }{
+ {
+ sortType: "default",
+ wants: []int64{1, 3, 2, 4},
+ },
+ {
+ sortType: "oldest",
+ wants: []int64{4, 2, 3, 1},
+ },
+ {
+ sortType: "recentupdate",
+ wants: []int64{1, 3, 2, 4},
+ },
+ {
+ sortType: "leastupdate",
+ wants: []int64{4, 2, 3, 1},
+ },
+ }
+
+ for _, tt := range tests {
+ projects, count, err := FindProjects(db.DefaultContext, SearchOptions{
+ OrderBy: GetSearchOrderByBySortType(tt.sortType),
+ })
+ assert.NoError(t, err)
+ assert.EqualValues(t, int64(4), count)
+ if assert.Len(t, projects, 4) {
+ for i := range projects {
+ assert.EqualValues(t, tt.wants[i], projects[i].ID)
+ }
+ }
+ }
+}
diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go
index 21cb23000d..60032c777d 100644
--- a/routers/web/org/projects.go
+++ b/routers/web/org/projects.go
@@ -62,7 +62,7 @@ func Projects(ctx *context.Context) {
OwnerID: ctx.ContextUser.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
- SortType: sortType,
+ OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: projectType,
})
if err != nil {
diff --git a/routers/web/repo/projects.go b/routers/web/repo/projects.go
index 066cdbc5fd..6bfb21c134 100644
--- a/routers/web/repo/projects.go
+++ b/routers/web/repo/projects.go
@@ -74,7 +74,7 @@ func Projects(ctx *context.Context) {
RepoID: repo.ID,
Page: page,
IsClosed: util.OptionalBoolOf(isShowClosed),
- SortType: sortType,
+ OrderBy: project_model.GetSearchOrderByBySortType(sortType),
Type: project_model.TypeRepository,
})
if err != nil {