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 }