feat: [CODE-2324]: added reviewer-add PR activity entry (#2698)

* added reviewer-add PR activity entry
CODE-2402
Marko Gaćeša 2024-09-17 15:45:01 +00:00 committed by Harness
parent dc5bc6ed44
commit cafa0148d8
4 changed files with 59 additions and 20 deletions

View File

@ -98,6 +98,7 @@ func (c *Controller) ReviewerAdd(
}
var reviewer *types.PullReqReviewer
var added bool
err = c.tx.WithTx(ctx, func(ctx context.Context) error {
reviewer, err = c.reviewerStore.Find(ctx, pr.ID, in.ReviewerID)
@ -110,6 +111,7 @@ func (c *Controller) ReviewerAdd(
}
reviewer = newPullReqReviewer(session, pr, repo, reviewerInfo, addedByInfo, reviewerType, in)
added = true
return c.reviewerStore.Create(ctx, reviewer)
})
@ -117,8 +119,38 @@ func (c *Controller) ReviewerAdd(
return nil, fmt.Errorf("failed to create pull request reviewer: %w", err)
}
if !added {
return reviewer, nil
}
err = func() error {
payload := &types.PullRequestActivityPayloadReviewerAdd{
PrincipalID: reviewer.PrincipalID,
ReviewerType: reviewerType,
}
metadata := &types.PullReqActivityMetadata{
Mentions: &types.PullReqActivityMentionsMetadata{IDs: []int64{reviewer.PrincipalID}},
}
if pr, err = c.pullreqStore.UpdateActivitySeq(ctx, pr); err != nil {
return fmt.Errorf("failed to increment pull request activity sequence: %w", err)
}
_, err = c.activityStore.CreateWithPayload(ctx, pr, session.Principal.ID, payload, metadata)
if err != nil {
return fmt.Errorf("failed to create pull request activity: %w", err)
}
return nil
}()
if err != nil {
log.Ctx(ctx).Err(err).Msg("failed to write pull request activity after adding a reviewer")
}
c.reportReviewerAddition(ctx, session, pr, reviewer)
return reviewer, err
return reviewer, nil
}
func (c *Controller) reportReviewerAddition(
@ -134,9 +166,11 @@ func (c *Controller) reportReviewerAddition(
}
// newPullReqReviewer creates new pull request reviewer object.
func newPullReqReviewer(session *auth.Session, pullReq *types.PullReq,
func newPullReqReviewer(
session *auth.Session, pullReq *types.PullReq,
repo *types.Repository, reviewerInfo, addedByInfo *types.PrincipalInfo,
reviewerType enum.PullReqReviewerType, in *ReviewerAddInput) *types.PullReqReviewer {
reviewerType enum.PullReqReviewerType, in *ReviewerAddInput,
) *types.PullReqReviewer {
now := time.Now().UnixMilli()
return &types.PullReqReviewer{
PullReqID: pullReq.ID,

View File

@ -74,27 +74,22 @@ func (c *Controller) ReviewerDelete(
return fmt.Errorf("failed to delete reviewer: %w", err)
}
if reviewer.ReviewDecision == enum.PullReqReviewDecisionPending {
// We create a pull request activity entry only if a review has actually been submitted.
return nil
}
activityPayload := &types.PullRequestActivityPayloadReviewerDelete{
CommitSHA: reviewer.SHA,
Decision: reviewer.ReviewDecision,
PrincipalID: reviewer.PrincipalID,
}
metadata := &types.PullReqActivityMetadata{
Mentions: &types.PullReqActivityMentionsMetadata{IDs: []int64{reviewer.PrincipalID}},
}
err = func() error {
payload := &types.PullRequestActivityPayloadReviewerDelete{
CommitSHA: reviewer.SHA,
Decision: reviewer.ReviewDecision,
PrincipalID: reviewer.PrincipalID,
}
metadata := &types.PullReqActivityMetadata{
Mentions: &types.PullReqActivityMentionsMetadata{IDs: []int64{reviewer.PrincipalID}},
}
if pr, err = c.pullreqStore.UpdateActivitySeq(ctx, pr); err != nil {
return fmt.Errorf("failed to increment pull request activity sequence: %w", err)
}
_, err = c.activityStore.CreateWithPayload(ctx, pr, session.Principal.ID, activityPayload, metadata)
_, err = c.activityStore.CreateWithPayload(ctx, pr, session.Principal.ID, payload, metadata)
if err != nil {
return fmt.Errorf("failed to create pull request activity: %w", err)
}
@ -103,7 +98,7 @@ func (c *Controller) ReviewerDelete(
}()
if err != nil {
// non-critical error
log.Ctx(ctx).Err(err).Msgf("failed to write pull request activity after reviewer removal")
log.Ctx(ctx).Err(err).Msg("failed to write pull request activity after reviewer removal")
}
return nil

View File

@ -83,6 +83,7 @@ const (
PullReqActivityTypeTitleChange PullReqActivityType = "title-change"
PullReqActivityTypeStateChange PullReqActivityType = "state-change"
PullReqActivityTypeReviewSubmit PullReqActivityType = "review-submit"
PullReqActivityTypeReviewerAdd PullReqActivityType = "reviewer-add"
PullReqActivityTypeReviewerDelete PullReqActivityType = "reviewer-delete"
PullReqActivityTypeBranchUpdate PullReqActivityType = "branch-update"
PullReqActivityTypeBranchDelete PullReqActivityType = "branch-delete"

View File

@ -130,6 +130,15 @@ func (a *PullRequestActivityPayloadReviewSubmit) ActivityType() enum.PullReqActi
return enum.PullReqActivityTypeReviewSubmit
}
type PullRequestActivityPayloadReviewerAdd struct {
PrincipalID int64 `json:"principal_id"`
ReviewerType enum.PullReqReviewerType `json:"reviewer_type"`
}
func (a *PullRequestActivityPayloadReviewerAdd) ActivityType() enum.PullReqActivityType {
return enum.PullReqActivityTypeReviewerAdd
}
type PullRequestActivityPayloadReviewerDelete struct {
CommitSHA string `json:"commit_sha"`
Decision enum.PullReqReviewDecision `json:"decision"`