Skip to content

Commit 6576f32

Browse files
committed
Move GetFeeds to service layer
1 parent 68731c0 commit 6576f32

File tree

13 files changed

+510
-489
lines changed

13 files changed

+510
-489
lines changed

models/activities/action.go

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -448,65 +448,13 @@ type GetFeedsOptions struct {
448448
Date string // the day we want activity for: YYYY-MM-DD
449449
}
450450

451-
// GetFeeds returns actions according to the provided options
452-
func GetFeeds(ctx context.Context, opts GetFeedsOptions) (ActionList, int64, error) {
453-
if opts.RequestedUser == nil && opts.RequestedTeam == nil && opts.RequestedRepo == nil {
454-
return nil, 0, fmt.Errorf("need at least one of these filters: RequestedUser, RequestedTeam, RequestedRepo")
455-
}
456-
457-
cond, err := activityQueryCondition(ctx, opts)
458-
if err != nil {
459-
return nil, 0, err
460-
}
461-
462-
actions := make([]*Action, 0, opts.PageSize)
463-
var count int64
464-
opts.SetDefaultValues()
465-
466-
if opts.Page < 10 { // TODO: why it's 10 but other values? It's an experience value.
467-
sess := db.GetEngine(ctx).Where(cond)
468-
sess = db.SetSessionPagination(sess, &opts)
469-
470-
count, err = sess.Desc("`action`.created_unix").FindAndCount(&actions)
471-
if err != nil {
472-
return nil, 0, fmt.Errorf("FindAndCount: %w", err)
473-
}
474-
} else {
475-
// First, only query which IDs are necessary, and only then query all actions to speed up the overall query
476-
sess := db.GetEngine(ctx).Where(cond).Select("`action`.id")
477-
sess = db.SetSessionPagination(sess, &opts)
478-
479-
actionIDs := make([]int64, 0, opts.PageSize)
480-
if err := sess.Table("action").Desc("`action`.created_unix").Find(&actionIDs); err != nil {
481-
return nil, 0, fmt.Errorf("Find(actionsIDs): %w", err)
482-
}
483-
484-
count, err = db.GetEngine(ctx).Where(cond).
485-
Table("action").
486-
Cols("`action`.id").Count()
487-
if err != nil {
488-
return nil, 0, fmt.Errorf("Count: %w", err)
489-
}
490-
491-
if err := db.GetEngine(ctx).In("`action`.id", actionIDs).Desc("`action`.created_unix").Find(&actions); err != nil {
492-
return nil, 0, fmt.Errorf("Find: %w", err)
493-
}
494-
}
495-
496-
if err := ActionList(actions).LoadAttributes(ctx); err != nil {
497-
return nil, 0, fmt.Errorf("LoadAttributes: %w", err)
498-
}
499-
500-
return actions, count, nil
501-
}
502-
503451
// ActivityReadable return whether doer can read activities of user
504452
func ActivityReadable(user, doer *user_model.User) bool {
505453
return !user.KeepActivityPrivate ||
506454
doer != nil && (doer.IsAdmin || user.ID == doer.ID)
507455
}
508456

509-
func activityQueryCondition(ctx context.Context, opts GetFeedsOptions) (builder.Cond, error) {
457+
func ActivityQueryCondition(ctx context.Context, opts GetFeedsOptions) (builder.Cond, error) {
510458
cond := builder.NewCond()
511459

512460
if opts.RequestedTeam != nil && opts.RequestedUser == nil {

models/activities/user_heatmap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func getUserHeatmapData(ctx context.Context, user *user_model.User, team *organi
4747
groupByName = groupBy
4848
}
4949

50-
cond, err := activityQueryCondition(ctx, GetFeedsOptions{
50+
cond, err := ActivityQueryCondition(ctx, GetFeedsOptions{
5151
RequestedUser: user,
5252
RequestedTeam: team,
5353
Actor: doer,

routers/api/v1/org/org.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"code.gitea.io/gitea/routers/api/v1/utils"
2020
"code.gitea.io/gitea/services/context"
2121
"code.gitea.io/gitea/services/convert"
22+
feed_service "code.gitea.io/gitea/services/feed"
2223
"code.gitea.io/gitea/services/org"
2324
user_service "code.gitea.io/gitea/services/user"
2425
)
@@ -447,7 +448,7 @@ func ListOrgActivityFeeds(ctx *context.APIContext) {
447448
ListOptions: listOptions,
448449
}
449450

450-
feeds, count, err := activities_model.GetFeeds(ctx, opts)
451+
feeds, count, err := feed_service.GetFeeds(ctx, opts)
451452
if err != nil {
452453
ctx.Error(http.StatusInternalServerError, "GetFeeds", err)
453454
return

routers/api/v1/org/team.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"code.gitea.io/gitea/routers/api/v1/utils"
2424
"code.gitea.io/gitea/services/context"
2525
"code.gitea.io/gitea/services/convert"
26+
feed_service "code.gitea.io/gitea/services/feed"
2627
org_service "code.gitea.io/gitea/services/org"
2728
repo_service "code.gitea.io/gitea/services/repository"
2829
)
@@ -883,7 +884,7 @@ func ListTeamActivityFeeds(ctx *context.APIContext) {
883884
ListOptions: listOptions,
884885
}
885886

886-
feeds, count, err := activities_model.GetFeeds(ctx, opts)
887+
feeds, count, err := feed_service.GetFeeds(ctx, opts)
887888
if err != nil {
888889
ctx.Error(http.StatusInternalServerError, "GetFeeds", err)
889890
return

routers/api/v1/repo/repo.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"code.gitea.io/gitea/services/convert"
3737
"code.gitea.io/gitea/services/issue"
3838
repo_service "code.gitea.io/gitea/services/repository"
39+
feed_service "code.gitea.io/gitea/services/feed"
3940
)
4041

4142
// Search repositories via options
@@ -1313,7 +1314,7 @@ func ListRepoActivityFeeds(ctx *context.APIContext) {
13131314
ListOptions: listOptions,
13141315
}
13151316

1316-
feeds, count, err := activities_model.GetFeeds(ctx, opts)
1317+
feeds, count, err := feed_service.GetFeeds(ctx, opts)
13171318
if err != nil {
13181319
ctx.Error(http.StatusInternalServerError, "GetFeeds", err)
13191320
return

routers/api/v1/user/user.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"code.gitea.io/gitea/routers/api/v1/utils"
1414
"code.gitea.io/gitea/services/context"
1515
"code.gitea.io/gitea/services/convert"
16+
feed_service "code.gitea.io/gitea/services/feed"
1617
)
1718

1819
// Search search users
@@ -214,7 +215,7 @@ func ListUserActivityFeeds(ctx *context.APIContext) {
214215
ListOptions: listOptions,
215216
}
216217

217-
feeds, count, err := activities_model.GetFeeds(ctx, opts)
218+
feeds, count, err := feed_service.GetFeeds(ctx, opts)
218219
if err != nil {
219220
ctx.Error(http.StatusInternalServerError, "GetFeeds", err)
220221
return

routers/web/feed/profile.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"code.gitea.io/gitea/modules/markup"
1111
"code.gitea.io/gitea/modules/markup/markdown"
1212
"code.gitea.io/gitea/services/context"
13+
feed_service "code.gitea.io/gitea/services/feed"
1314

1415
"github.com/gorilla/feeds"
1516
)
@@ -28,7 +29,7 @@ func ShowUserFeedAtom(ctx *context.Context) {
2829
func showUserFeed(ctx *context.Context, formatType string) {
2930
includePrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
3031

31-
actions, _, err := activities_model.GetFeeds(ctx, activities_model.GetFeedsOptions{
32+
actions, _, err := feed_service.GetFeeds(ctx, activities_model.GetFeedsOptions{
3233
RequestedUser: ctx.ContextUser,
3334
Actor: ctx.Doer,
3435
IncludePrivate: includePrivate,

routers/web/feed/repo.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import (
99
activities_model "code.gitea.io/gitea/models/activities"
1010
repo_model "code.gitea.io/gitea/models/repo"
1111
"code.gitea.io/gitea/services/context"
12+
feed_service "code.gitea.io/gitea/services/feed"
1213

1314
"github.com/gorilla/feeds"
1415
)
1516

1617
// ShowRepoFeed shows user activity on the repo as RSS / Atom feed
1718
func ShowRepoFeed(ctx *context.Context, repo *repo_model.Repository, formatType string) {
18-
actions, _, err := activities_model.GetFeeds(ctx, activities_model.GetFeedsOptions{
19+
actions, _, err := feed_service.GetFeeds(ctx, activities_model.GetFeedsOptions{
1920
RequestedRepo: repo,
2021
Actor: ctx.Doer,
2122
IncludePrivate: true,

routers/web/user/home.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"code.gitea.io/gitea/modules/setting"
3434
"code.gitea.io/gitea/routers/web/feed"
3535
"code.gitea.io/gitea/services/context"
36+
feed_service "code.gitea.io/gitea/services/feed"
3637
issue_service "code.gitea.io/gitea/services/issue"
3738
pull_service "code.gitea.io/gitea/services/pull"
3839

@@ -113,7 +114,7 @@ func Dashboard(ctx *context.Context) {
113114
ctx.Data["HeatmapTotalContributions"] = activities_model.GetTotalContributionsInHeatmap(data)
114115
}
115116

116-
feeds, count, err := activities_model.GetFeeds(ctx, activities_model.GetFeedsOptions{
117+
feeds, count, err := feed_service.GetFeeds(ctx, activities_model.GetFeedsOptions{
117118
RequestedUser: ctxUser,
118119
RequestedTeam: ctx.Org.Team,
119120
Actor: ctx.Doer,

routers/web/user/profile.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"code.gitea.io/gitea/routers/web/org"
2727
shared_user "code.gitea.io/gitea/routers/web/shared/user"
2828
"code.gitea.io/gitea/services/context"
29+
feed_service "code.gitea.io/gitea/services/feed"
2930
)
3031

3132
const (
@@ -167,7 +168,7 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileDb
167168
case "activity":
168169
date := ctx.FormString("date")
169170
pagingNum = setting.UI.FeedPagingNum
170-
items, count, err := activities_model.GetFeeds(ctx, activities_model.GetFeedsOptions{
171+
items, count, err := feed_service.GetFeeds(ctx, activities_model.GetFeedsOptions{
171172
RequestedUser: ctx.ContextUser,
172173
Actor: ctx.Doer,
173174
IncludePrivate: showPrivate,

0 commit comments

Comments
 (0)