mirror of
https://github.com/go-gitea/gitea
synced 2025-07-22 18:28:37 +00:00
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 commit5eca929185
. * 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 commitbab1235622
. * 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
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user