Add missing X-Total-Count and fix some related bugs (#17968)
* Add missing `X-Total-Count` and fix some related bugs Adds `X-Total-Count` header to APIs that return a list but doesn't have it yet. Fixed bugs: * not returned after reporting error (https://github.com/qwerty287/gitea/blob/39eb82446c6fe5da3d79124e1f701f3795625b69/routers/api/v1/user/star.go#L70) * crash with index out of bounds, API issue/issueSubscriptions I also found various endpoints that return lists but do not apply/support pagination yet: ``` /repos/{owner}/{repo}/issues/{index}/labels /repos/{owner}/{repo}/issues/comments/{id}/reactions /repos/{owner}/{repo}/branch_protections /repos/{owner}/{repo}/contents /repos/{owner}/{repo}/hooks/git /repos/{owner}/{repo}/issue_templates /repos/{owner}/{repo}/releases/{id}/assets /repos/{owner}/{repo}/reviewers /repos/{owner}/{repo}/teams /user/emails /users/{username}/heatmap ``` If this is not expected, an new issue should be opened. Closes #13043 * fmt * Update routers/api/v1/repo/issue_subscription.go Co-authored-by: KN4CK3R <admin@oldschoolhack.me> * Use FindAndCount Co-authored-by: KN4CK3R <admin@oldschoolhack.me> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
@@ -71,7 +71,7 @@ func (opts *FindReactionsOptions) toConds() builder.Cond {
|
||||
}
|
||||
|
||||
// FindCommentReactions returns a ReactionList of all reactions from an comment
|
||||
func FindCommentReactions(comment *Comment) (ReactionList, error) {
|
||||
func FindCommentReactions(comment *Comment) (ReactionList, int64, error) {
|
||||
return findReactions(db.GetEngine(db.DefaultContext), FindReactionsOptions{
|
||||
IssueID: comment.IssueID,
|
||||
CommentID: comment.ID,
|
||||
@@ -79,7 +79,7 @@ func FindCommentReactions(comment *Comment) (ReactionList, error) {
|
||||
}
|
||||
|
||||
// FindIssueReactions returns a ReactionList of all reactions from an issue
|
||||
func FindIssueReactions(issue *Issue, listOptions db.ListOptions) (ReactionList, error) {
|
||||
func FindIssueReactions(issue *Issue, listOptions db.ListOptions) (ReactionList, int64, error) {
|
||||
return findReactions(db.GetEngine(db.DefaultContext), FindReactionsOptions{
|
||||
ListOptions: listOptions,
|
||||
IssueID: issue.ID,
|
||||
@@ -87,20 +87,22 @@ func FindIssueReactions(issue *Issue, listOptions db.ListOptions) (ReactionList,
|
||||
})
|
||||
}
|
||||
|
||||
func findReactions(e db.Engine, opts FindReactionsOptions) ([]*Reaction, error) {
|
||||
e = e.
|
||||
func findReactions(e db.Engine, opts FindReactionsOptions) ([]*Reaction, int64, error) {
|
||||
sess := e.
|
||||
Where(opts.toConds()).
|
||||
In("reaction.`type`", setting.UI.Reactions).
|
||||
Asc("reaction.issue_id", "reaction.comment_id", "reaction.created_unix", "reaction.id")
|
||||
if opts.Page != 0 {
|
||||
e = db.SetEnginePagination(e, &opts)
|
||||
sess = db.SetSessionPagination(sess, &opts)
|
||||
|
||||
reactions := make([]*Reaction, 0, opts.PageSize)
|
||||
return reactions, e.Find(&reactions)
|
||||
count, err := sess.FindAndCount(&reactions)
|
||||
return reactions, count, err
|
||||
}
|
||||
|
||||
reactions := make([]*Reaction, 0, 10)
|
||||
return reactions, e.Find(&reactions)
|
||||
count, err := sess.FindAndCount(&reactions)
|
||||
return reactions, count, err
|
||||
}
|
||||
|
||||
func createReaction(e db.Engine, opts *ReactionOptions) (*Reaction, error) {
|
||||
@@ -120,7 +122,7 @@ func createReaction(e db.Engine, opts *ReactionOptions) (*Reaction, error) {
|
||||
findOpts.CommentID = opts.Comment.ID
|
||||
}
|
||||
|
||||
existingR, err := findReactions(e, findOpts)
|
||||
existingR, _, err := findReactions(e, findOpts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user