Skip to content

Refactor Issues Subscription #8738

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 37 commits into from
Nov 20, 2019
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
15005b1
FIX: getIssueWatchers() get only aktive suscriber
6543 Oct 29, 2019
b180c3b
Merge branch 'master' into refactor_issues-subscription
6543 Oct 29, 2019
783df3c
save query to work later with it or not ...
6543 Oct 29, 2019
13879f8
Merge branch 'master' into refactor_issues-subscription
6543 Oct 30, 2019
47ba722
Merge branch 'master' into refactor_issues-subscription
6543 Nov 1, 2019
9f3b25c
fix test + add new case
6543 Nov 1, 2019
aa31558
corect tests + GetIssueWatch
6543 Nov 1, 2019
16d2657
Merge branch 'master' into refactor_issues-subscription
6543 Nov 1, 2019
717237a
Merge branch 'master' into refactor_issues-subscription
6543 Nov 2, 2019
52cc73b
API issue_subscripton: Put/Delete require tocken
6543 Nov 4, 2019
e607e9f
remove redundant code
6543 Nov 4, 2019
334472d
swagger specify return value
6543 Nov 5, 2019
318657f
remove unused binding
6543 Nov 5, 2019
a06fdb4
remove note
6543 Nov 6, 2019
90c36e3
Merge branch 'master' into refactor_issues-subscription
6543 Nov 6, 2019
d667e59
Merge branch 'master' into refactor_issues-subscription
6543 Nov 8, 2019
2902356
Merge branch 'master' into refactor_issues-subscription
6543 Nov 10, 2019
212aa8f
Merge branch 'master' into refactor_issues-subscription
6543 Nov 13, 2019
cd6f2be
Merge branch 'master' into refactor_issues-subscription
6543 Nov 15, 2019
7e97d57
ID should be unique!
6543 Nov 15, 2019
c1de540
use xorm session
6543 Nov 15, 2019
4facdc9
Revert "use xorm session"
6543 Nov 15, 2019
0317c54
better test code
6543 Nov 15, 2019
7aa2e31
Merge branch 'master' into refactor_issues-subscription
6543 Nov 15, 2019
28e8152
Merge branch 'master' into refactor_issues-subscription
6543 Nov 15, 2019
2243ee0
Merge branch 'master' into refactor_issues-subscription
6543 Nov 15, 2019
0ac149a
use more assert methodes
6543 Nov 15, 2019
863fcbb
Merge branch 'master' into refactor_issues-subscription
6543 Nov 15, 2019
8d53304
Merge branch 'master' into refactor_issues-subscription
6543 Nov 17, 2019
d334d90
Merge branch 'master' into refactor_issues-subscription
6543 Nov 17, 2019
677f158
Merge branch 'master' into refactor_issues-subscription
6543 Nov 18, 2019
3951869
Merge branch 'master' into refactor_issues-subscription
6543 Nov 18, 2019
309dbb8
Merge branch 'master' into refactor_issues-subscription
6543 Nov 18, 2019
e09b3a3
Merge branch 'master' into refactor_issues-subscription
6543 Nov 18, 2019
b0f116e
Merge branch 'master' into refactor_issues-subscription
6543 Nov 19, 2019
996b80c
Merge branch 'master' into refactor_issues-subscription
6543 Nov 20, 2019
acf11af
Merge branch 'master' into refactor_issues-subscription
6543 Nov 20, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions models/fixtures/issue_watch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,19 @@
is_watching: false
created_unix: 946684800
updated_unix: 946684800

-
id: 3
user_id: 2
issue_id: 7
is_watching: true
created_unix: 946684800
updated_unix: 946684800

-
id: 3
user_id: 1
issue_id: 7
is_watching: false
created_unix: 946684800
updated_unix: 946684800
2 changes: 2 additions & 0 deletions models/issue_watch.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ func getIssueWatch(e Engine, userID, issueID int64) (iw *IssueWatch, exists bool
exists, err = e.
Where("user_id = ?", userID).
And("issue_id = ?", issueID).
And("is_watching = ?", true).
Get(iw)
return
}
Expand All @@ -68,6 +69,7 @@ func GetIssueWatchers(issueID int64) (IssueWatchList, error) {
func getIssueWatchers(e Engine, issueID int64) (watches IssueWatchList, err error) {
err = e.
Where("`issue_watch`.issue_id = ?", issueID).
And("`issue_watch`.is_watching = ?", true).
And("`user`.is_active = ?", true).
And("`user`.prohibit_login = ?", false).
Join("INNER", "`user`", "`user`.id = `issue_watch`.user_id").
Expand Down
10 changes: 8 additions & 2 deletions models/issue_watch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func TestGetIssueWatch(t *testing.T) {
assert.NoError(t, err)

_, exists, err = GetIssueWatch(2, 2)
assert.Equal(t, true, exists)
assert.Equal(t, false, exists)
assert.NoError(t, err)

_, exists, err = GetIssueWatch(3, 1)
Expand All @@ -48,9 +48,15 @@ func TestGetIssueWatchers(t *testing.T) {

iws, err = GetIssueWatchers(2)
assert.NoError(t, err)
assert.Equal(t, 1, len(iws))
// Watcher is not watching
assert.Equal(t, 0, len(iws))

iws, err = GetIssueWatchers(5)
assert.NoError(t, err)
assert.Equal(t, 0, len(iws))

iws, err = GetIssueWatchers(7)
assert.NoError(t, err)
// Watcher is not watching
assert.Equal(t, 1, len(iws))
}
6 changes: 3 additions & 3 deletions routers/api/v1/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -691,9 +691,9 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Post("/stop", reqToken(), repo.StopIssueStopwatch)
})
m.Group("/subscriptions", func() {
m.Get("", bind(api.User{}), repo.GetIssueSubscribers)
m.Put("/:user", repo.AddIssueSubscription)
m.Delete("/:user", repo.DelIssueSubscription)
m.Get("", repo.GetIssueSubscribers)
m.Put("/:user", reqToken(), repo.AddIssueSubscription)
m.Delete("/:user", reqToken(), repo.DelIssueSubscription)
})
})
}, mustEnableIssuesOrPulls)
Expand Down
48 changes: 9 additions & 39 deletions routers/api/v1/repo/issue_subscription.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ package repo
import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
api "code.gitea.io/gitea/modules/structs"
)

// AddIssueSubscription Subscribe user to issue
Expand Down Expand Up @@ -48,40 +47,7 @@ func AddIssueSubscription(ctx *context.APIContext) {
// description: User can only subscribe itself if he is no admin
// "404":
// description: Issue not found
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil {
if models.IsErrIssueNotExist(err) {
ctx.NotFound()
} else {
ctx.Error(500, "GetIssueByIndex", err)
}

return
}

user, err := models.GetUserByName(ctx.Params(":user"))
if err != nil {
if models.IsErrUserNotExist(err) {
ctx.NotFound()
} else {
ctx.Error(500, "GetUserByName", err)
}

return
}

//only admin and user for itself can change subscription
if user.ID != ctx.User.ID && !ctx.User.IsAdmin {
ctx.Error(403, "User", nil)
return
}

if err := models.CreateOrUpdateIssueWatch(user.ID, issue.ID, true); err != nil {
ctx.Error(500, "CreateOrUpdateIssueWatch", err)
return
}

ctx.Status(201)
setIssueSubscription(ctx, true)
}

// DelIssueSubscription Unsubscribe user from issue
Expand Down Expand Up @@ -122,6 +88,10 @@ func DelIssueSubscription(ctx *context.APIContext) {
// description: User can only subscribe itself if he is no admin
// "404":
// description: Issue not found
setIssueSubscription(ctx, false)
}

func setIssueSubscription(ctx *context.APIContext, watch bool) {
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil {
if models.IsErrIssueNotExist(err) {
Expand Down Expand Up @@ -150,7 +120,7 @@ func DelIssueSubscription(ctx *context.APIContext) {
return
}

if err := models.CreateOrUpdateIssueWatch(user.ID, issue.ID, false); err != nil {
if err := models.CreateOrUpdateIssueWatch(user.ID, issue.ID, watch); err != nil {
ctx.Error(500, "CreateOrUpdateIssueWatch", err)
return
}
Expand All @@ -159,7 +129,7 @@ func DelIssueSubscription(ctx *context.APIContext) {
}

// GetIssueSubscribers return subscribers of an issue
func GetIssueSubscribers(ctx *context.APIContext, form api.User) {
func GetIssueSubscribers(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/issues/{index}/subscriptions issue issueSubscriptions
// ---
// summary: Get users who subscribed on an issue.
Expand All @@ -185,8 +155,8 @@ func GetIssueSubscribers(ctx *context.APIContext, form api.User) {
// format: int64
// required: true
// responses:
// "201":
// "$ref": "#/responses/empty"
// "200":
// "$ref": "#/responses/UserList"
// "404":
// description: Issue not found
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
Expand Down
4 changes: 2 additions & 2 deletions templates/swagger/v1_json.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -3832,8 +3832,8 @@
}
],
"responses": {
"201": {
"$ref": "#/responses/empty"
"200": {
"$ref": "#/responses/UserList"
},
"404": {
"description": "Issue not found"
Expand Down