github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/comments/domain/contexters/contexters.go (about)

     1  package contexters
     2  
     3  import (
     4  	likeable_contexters "github.com/k0marov/go-socnet/core/abstract/ownable_likeable/contexters"
     5  	"github.com/k0marov/go-socnet/core/general/core_err"
     6  	"github.com/k0marov/go-socnet/core/general/core_values"
     7  
     8  	"github.com/k0marov/go-socnet/core/helpers"
     9  	"github.com/k0marov/go-socnet/features/comments/domain/entities"
    10  	profile_service "github.com/k0marov/go-socnet/features/profiles/domain/service"
    11  )
    12  
    13  type CommentContextAdder func(comment entities.Comment, caller core_values.UserId) (entities.ContextedComment, error)
    14  type CommentListContextAdder func(comments []entities.Comment, caller core_values.UserId) ([]entities.ContextedComment, error)
    15  
    16  func NewCommentContextAdder(getProfile profile_service.ProfileGetter, getContext likeable_contexters.OwnLikeContextGetter) CommentContextAdder {
    17  	return func(comment entities.Comment, caller core_values.UserId) (entities.ContextedComment, error) {
    18  		author, err := getProfile(comment.AuthorId, caller)
    19  		if err != nil {
    20  			return entities.ContextedComment{}, core_err.Rethrow("getting author of comment", err)
    21  		}
    22  		context, err := getContext(comment.Id, author.Id, caller)
    23  		if err != nil {
    24  			return entities.ContextedComment{}, core_err.Rethrow("getting context data of a comment", err)
    25  		}
    26  		return entities.ContextedComment{
    27  			Comment:        comment,
    28  			Author:         author,
    29  			OwnLikeContext: context,
    30  		}, nil
    31  	}
    32  }
    33  
    34  func NewCommentListContextAdder(addContext CommentContextAdder) CommentListContextAdder {
    35  	return func(comments []entities.Comment, caller core_values.UserId) (ctxComments []entities.ContextedComment, err error) {
    36  		return helpers.MapForEachWithErr(comments, func(comm entities.Comment) (entities.ContextedComment, error) {
    37  			return addContext(comm, caller)
    38  		})
    39  	}
    40  }