From 17af2d17be915d9c9df092b391a5cbfa90ebf44c Mon Sep 17 00:00:00 2001 From: Jonas Franz Date: Thu, 10 May 2018 21:50:57 +0200 Subject: [PATCH] Add GetCurrentReview to simplify fetching current review Signed-off-by: Jonas Franz --- models/review.go | 21 +++++++++++++++++++++ routers/repo/pull_review.go | 19 +++++++------------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/models/review.go b/models/review.go index 4bcc93c284..fd6827e482 100644 --- a/models/review.go +++ b/models/review.go @@ -6,6 +6,7 @@ package models import ( "code.gitea.io/gitea/modules/util" + "github.com/go-xorm/builder" ) @@ -156,3 +157,23 @@ func createReview(e Engine, opts CreateReviewOptions) (*Review, error) { func CreateReview(opts CreateReviewOptions) (*Review, error) { return createReview(x, opts) } + +func getCurrentReview(e Engine, reviewer *User, issue *Issue) (*Review, error) { + reviews, err := findReviews(e, FindReviewOptions{ + Type: ReviewTypePending, + IssueID: issue.ID, + ReviewerID: reviewer.ID, + }) + if err != nil { + return nil, err + } + if len(reviews) == 0 { + return nil, ErrReviewNotExist{} + } + return reviews[0], nil +} + +// GetCurrentReview returns the current pending review of reviewer for given issue +func GetCurrentReview(reviewer *User, issue *Issue) (*Review, error) { + return getCurrentReview(x, reviewer, issue) +} diff --git a/routers/repo/pull_review.go b/routers/repo/pull_review.go index 801ec79841..0d71be1132 100644 --- a/routers/repo/pull_review.go +++ b/routers/repo/pull_review.go @@ -45,17 +45,14 @@ func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) { review := new(models.Review) if form.IsReview { + var err error // Check if the user has already a pending review for this issue - reviews, err := models.FindReviews(models.FindReviewOptions{ - ReviewerID: ctx.User.ID, - IssueID: issue.ID, - Type: models.ReviewTypePending, - }) - if err != nil { - ctx.ServerError("CreateCodeComment", err) - return - } - if len(reviews) == 0 { + if review, err = models.GetCurrentReview(ctx.User, issue); err != nil { + if !models.IsErrReviewNotExist(err) { + ctx.ServerError("CreateCodeComment", err) + return + } + // No pending review exists // Create a new pending review for this issue & user if review, err = models.CreateReview(models.CreateReviewOptions{ Type: models.ReviewTypePending, @@ -65,8 +62,6 @@ func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) { ctx.ServerError("CreateCodeComment", err) return } - } else { - review = reviews[0] } }