github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/abstract/ownable_likeable/service/service.go (about)

     1  package service
     2  
     3  import (
     4  	"github.com/k0marov/go-socnet/core/abstract/likeable"
     5  	"github.com/k0marov/go-socnet/core/abstract/ownable"
     6  	"github.com/k0marov/go-socnet/core/general/client_errors"
     7  	"github.com/k0marov/go-socnet/core/general/core_err"
     8  	"github.com/k0marov/go-socnet/core/general/core_values"
     9  )
    10  
    11  type SafeLikeToggler func(target string, caller core_values.UserId) error
    12  
    13  func NewSafeLikeToggler(getOwner ownable.OwnerGetter, toggleLike likeable.LikeToggler) SafeLikeToggler {
    14  	return func(target string, caller core_values.UserId) error {
    15  		owner, err := getOwner(target)
    16  		if err != nil {
    17  			return core_err.Rethrow("getting owner of OwnableLikeable", err)
    18  		}
    19  		if owner == caller {
    20  			return client_errors.LikingYourself
    21  		}
    22  		err = toggleLike(target, caller)
    23  		if err != nil {
    24  			return core_err.Rethrow("toggling like on OwnableLikeable", err)
    25  		}
    26  		return nil
    27  	}
    28  }