github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/posts/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/posts/domain/entities"
    10  	profile_service "github.com/k0marov/go-socnet/features/profiles/domain/service"
    11  )
    12  
    13  type PostContextAdder func(post entities.Post, caller core_values.UserId) (entities.ContextedPost, error)
    14  type PostListContextAdder func(posts []entities.Post, caller core_values.UserId) ([]entities.ContextedPost, error)
    15  
    16  func NewPostContextAdder(getProfile profile_service.ProfileGetter, getContext likeable_contexters.OwnLikeContextGetter) PostContextAdder {
    17  	return func(post entities.Post, caller core_values.UserId) (entities.ContextedPost, error) {
    18  		author, err := getProfile(post.PostModel.AuthorId, caller)
    19  		if err != nil {
    20  			return entities.ContextedPost{}, core_err.Rethrow("getting author of post", err)
    21  		}
    22  		context, err := getContext(post.Id, author.Id, caller)
    23  		if err != nil {
    24  			return entities.ContextedPost{}, core_err.Rethrow("getting context of post", err)
    25  		}
    26  		ctxPost := entities.ContextedPost{
    27  			Post:           post,
    28  			OwnLikeContext: context,
    29  			Author:         author,
    30  		}
    31  		return ctxPost, nil
    32  	}
    33  }
    34  
    35  func NewPostListContextAdder(addContext PostContextAdder) PostListContextAdder {
    36  	return func(posts []entities.Post, caller core_values.UserId) ([]entities.ContextedPost, error) {
    37  		return helpers.MapForEachWithErr(posts, func(post entities.Post) (entities.ContextedPost, error) {
    38  			return addContext(post, caller)
    39  		})
    40  	}
    41  }