diff options
author | 6543 <6543@obermui.de> | 2019-12-07 23:04:19 +0100 |
---|---|---|
committer | techknowlogick <techknowlogick@gitea.io> | 2019-12-07 17:04:19 -0500 |
commit | 37e10d4543c1e516e1a721d72c0054fefceb9499 (patch) | |
tree | f824b014a135d3bcf243d5bb3e87cab3de225c90 /models/issue_reaction.go | |
parent | ee7df7ba8c5e6a4b32b0c4048d2b535d8df3cbe9 (diff) | |
download | gitea-37e10d4543c1e516e1a721d72c0054fefceb9499.tar.gz gitea-37e10d4543c1e516e1a721d72c0054fefceb9499.zip |
[API] Add Reactions (#9220)
* reject reactions wich ar not allowed
* dont duble check CreateReaction now throw ErrForbiddenIssueReaction
* add /repos/{owner}/{repo}/issues/comments/{id}/reactions endpoint
* add Find Functions
* fix some swagger stuff + add issue reaction endpoints + GET ReactionList now use FindReactions...
* explicite Issue Only Reaction for FindReactionsOptions with "-1" commentID
* load issue; load user ...
* return error again
* swagger def canged after LINT
* check if user has ben loaded
* add Tests
* better way of comparing results
* add suggestion
* use different issue for test
(dont interfear with integration test)
* test dont compare Location on timeCompare
* TEST: add forbidden dubble add
* add comments in code to explain
* add settings.UI.ReactionsMap
so if !setting.UI.ReactionsMap[opts.Type] works
Diffstat (limited to 'models/issue_reaction.go')
-rw-r--r-- | models/issue_reaction.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/models/issue_reaction.go b/models/issue_reaction.go index 4596d32d06..b4f332a089 100644 --- a/models/issue_reaction.go +++ b/models/issue_reaction.go @@ -33,16 +33,38 @@ type FindReactionsOptions struct { } func (opts *FindReactionsOptions) toConds() builder.Cond { + //If Issue ID is set add to Query var cond = builder.NewCond() if opts.IssueID > 0 { cond = cond.And(builder.Eq{"reaction.issue_id": opts.IssueID}) } + //If CommentID is > 0 add to Query + //If it is 0 Query ignore CommentID to select + //If it is -1 it explicit search of Issue Reactions where CommentID = 0 if opts.CommentID > 0 { cond = cond.And(builder.Eq{"reaction.comment_id": opts.CommentID}) + } else if opts.CommentID == -1 { + cond = cond.And(builder.Eq{"reaction.comment_id": 0}) } + return cond } +// FindCommentReactions returns a ReactionList of all reactions from an comment +func FindCommentReactions(comment *Comment) (ReactionList, error) { + return findReactions(x, FindReactionsOptions{ + IssueID: comment.IssueID, + CommentID: comment.ID}) +} + +// FindIssueReactions returns a ReactionList of all reactions from an issue +func FindIssueReactions(issue *Issue) (ReactionList, error) { + return findReactions(x, FindReactionsOptions{ + IssueID: issue.ID, + CommentID: -1, + }) +} + func findReactions(e Engine, opts FindReactionsOptions) ([]*Reaction, error) { reactions := make([]*Reaction, 0, 10) sess := e.Where(opts.toConds()) @@ -77,6 +99,10 @@ type ReactionOptions struct { // CreateReaction creates reaction for issue or comment. func CreateReaction(opts *ReactionOptions) (reaction *Reaction, err error) { + if !setting.UI.ReactionsMap[opts.Type] { + return nil, ErrForbiddenIssueReaction{opts.Type} + } + sess := x.NewSession() defer sess.Close() if err = sess.Begin(); err != nil { @@ -160,6 +186,19 @@ func DeleteCommentReaction(doer *User, issue *Issue, comment *Comment, content s }) } +// LoadUser load user of reaction +func (r *Reaction) LoadUser() (*User, error) { + if r.User != nil { + return r.User, nil + } + user, err := getUserByID(x, r.UserID) + if err != nil { + return nil, err + } + r.User = user + return user, nil +} + // ReactionList represents list of reactions type ReactionList []*Reaction |