code.gitea.io/gitea@v1.22.3/services/issue/reaction.go (about)

     1  // Copyright 2024 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package issue
     5  
     6  import (
     7  	"context"
     8  
     9  	issues_model "code.gitea.io/gitea/models/issues"
    10  	user_model "code.gitea.io/gitea/models/user"
    11  )
    12  
    13  // CreateIssueReaction creates a reaction on an issue.
    14  func CreateIssueReaction(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, content string) (*issues_model.Reaction, error) {
    15  	if err := issue.LoadRepo(ctx); err != nil {
    16  		return nil, err
    17  	}
    18  
    19  	if user_model.IsUserBlockedBy(ctx, doer, issue.PosterID, issue.Repo.OwnerID) {
    20  		return nil, user_model.ErrBlockedUser
    21  	}
    22  
    23  	return issues_model.CreateReaction(ctx, &issues_model.ReactionOptions{
    24  		Type:    content,
    25  		DoerID:  doer.ID,
    26  		IssueID: issue.ID,
    27  	})
    28  }
    29  
    30  // CreateCommentReaction creates a reaction on a comment.
    31  func CreateCommentReaction(ctx context.Context, doer *user_model.User, comment *issues_model.Comment, content string) (*issues_model.Reaction, error) {
    32  	if err := comment.LoadIssue(ctx); err != nil {
    33  		return nil, err
    34  	}
    35  
    36  	if err := comment.Issue.LoadRepo(ctx); err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	if user_model.IsUserBlockedBy(ctx, doer, comment.Issue.PosterID, comment.Issue.Repo.OwnerID, comment.PosterID) {
    41  		return nil, user_model.ErrBlockedUser
    42  	}
    43  
    44  	return issues_model.CreateReaction(ctx, &issues_model.ReactionOptions{
    45  		Type:      content,
    46  		DoerID:    doer.ID,
    47  		IssueID:   comment.Issue.ID,
    48  		CommentID: comment.ID,
    49  	})
    50  }