summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
author6543 <24977596+6543@users.noreply.github.com>2019-11-02 16:27:49 +0100
committerLunny Xiao <xiaolunwen@gmail.com>2019-11-02 23:27:49 +0800
commit5a187f4bcc9cbe5f44da4b623046289c97ede250 (patch)
tree2d7bd6c1778d56ec1105331707289178c6d1e342 /models
parentdd9cb32bff1a001d3f18cf4f5fcbfd1a0c3a2570 (diff)
downloadgitea-5a187f4bcc9cbe5f44da4b623046289c97ede250.tar.gz
gitea-5a187f4bcc9cbe5f44da4b623046289c97ede250.zip
Add API for Issue set Subscription (#8729)
* add issue subscriber API * subscribers return []user.APIFormat * add comments * more meaningfull description * without "reqToken()" api works ... * should be still secure beause ctx.user has to be there or nothing will hapen * FIX: getIssueWatchers() get only aktive suscriber * add return avter error on right position * Revert "FIX: getIssueWatchers() get only aktive suscriber" This reverts commit 5eca9291858a821981992b0aaa38cef610d84bca. * Update routers/api/v1/repo/issue.go Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * test go linter again * update swagger * GetIssueWatchers -> GetIssueSubscribers part one Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * GetIssueWatchers -> GetIssueSubscribers part two * Revert "test go linter again" This reverts commit bab12356227e44334de113b76f12099de0b8aaa6. * change description for unsubscribe too * golangci-lint timeout avter 5min * move issueSubscription to seperate file * dont create black entitys * use IsWatching until refactoring * Update License Info * better swagger description * Update .golangci.yml because functions moved from issue.go to issue_subscription.go * add IssueWatchList type * batch tasks * use e Engien * add error handling * error should be the last type when returning multiple items * short version * reurn empy UserList instead of nil
Diffstat (limited to 'models')
-rw-r--r--models/issue_watch.go33
-rw-r--r--models/userlist.go10
2 files changed, 41 insertions, 2 deletions
diff --git a/models/issue_watch.go b/models/issue_watch.go
index 2f55c6a84d..1ae0c9d474 100644
--- a/models/issue_watch.go
+++ b/models/issue_watch.go
@@ -16,6 +16,9 @@ type IssueWatch struct {
UpdatedUnix timeutil.TimeStamp `xorm:"updated NOT NULL"`
}
+// IssueWatchList contains IssueWatch
+type IssueWatchList []*IssueWatch
+
// CreateOrUpdateIssueWatch set watching for a user and issue
func CreateOrUpdateIssueWatch(userID, issueID int64, isWatching bool) error {
iw, exists, err := getIssueWatch(x, userID, issueID)
@@ -58,11 +61,11 @@ func getIssueWatch(e Engine, userID, issueID int64) (iw *IssueWatch, exists bool
}
// GetIssueWatchers returns watchers/unwatchers of a given issue
-func GetIssueWatchers(issueID int64) ([]*IssueWatch, error) {
+func GetIssueWatchers(issueID int64) (IssueWatchList, error) {
return getIssueWatchers(x, issueID)
}
-func getIssueWatchers(e Engine, issueID int64) (watches []*IssueWatch, err error) {
+func getIssueWatchers(e Engine, issueID int64) (watches IssueWatchList, err error) {
err = e.
Where("`issue_watch`.issue_id = ?", issueID).
And("`user`.is_active = ?", true).
@@ -83,3 +86,29 @@ func removeIssueWatchersByRepoID(e Engine, userID int64, repoID int64) error {
Update(iw)
return err
}
+
+// LoadWatchUsers return watching users
+func (iwl IssueWatchList) LoadWatchUsers() (users UserList, err error) {
+ return iwl.loadWatchUsers(x)
+}
+
+func (iwl IssueWatchList) loadWatchUsers(e Engine) (users UserList, err error) {
+ if len(iwl) == 0 {
+ return []*User{}, nil
+ }
+
+ var userIDs = make([]int64, 0, len(iwl))
+ for _, iw := range iwl {
+ if iw.IsWatching {
+ userIDs = append(userIDs, iw.UserID)
+ }
+ }
+
+ if len(userIDs) == 0 {
+ return []*User{}, nil
+ }
+
+ err = e.In("id", userIDs).Find(&users)
+
+ return
+}
diff --git a/models/userlist.go b/models/userlist.go
index a2a4248482..16ec6fee55 100644
--- a/models/userlist.go
+++ b/models/userlist.go
@@ -8,6 +8,7 @@ import (
"fmt"
"code.gitea.io/gitea/modules/log"
+ api "code.gitea.io/gitea/modules/structs"
)
//UserList is a list of user.
@@ -93,3 +94,12 @@ func (users UserList) loadTwoFactorStatus(e Engine) (map[int64]*TwoFactor, error
}
return tokenMaps, nil
}
+
+//APIFormat return list of users in api format
+func (users UserList) APIFormat() []*api.User {
+ var result []*api.User
+ for _, u := range users {
+ result = append(result, u.APIFormat())
+ }
+ return result
+}