github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/abstract/deletable/service/service.go (about) 1 package service 2 3 import ( 4 "github.com/k0marov/go-socnet/core/abstract/ownable" 5 "github.com/k0marov/go-socnet/core/general/client_errors" 6 "github.com/k0marov/go-socnet/core/general/core_err" 7 "github.com/k0marov/go-socnet/core/general/core_values" 8 ) 9 10 type StoreDeleter func(targetId string) error 11 12 type Deleter func(targetId string, caller core_values.UserId) error 13 type ForceDeleter func(targetId string) error 14 15 func NewDeleter(getOwner ownable.OwnerGetter, delete StoreDeleter) Deleter { 16 return func(targetId string, caller core_values.UserId) error { 17 owner, err := getOwner(targetId) 18 if err != nil { 19 return core_err.Rethrow("getting owner of target", err) 20 } 21 if caller != owner { 22 return client_errors.InsufficientPermissions 23 } 24 err = delete(targetId) 25 if err != nil { 26 return core_err.Rethrow("deleting the target", err) 27 } 28 return nil 29 } 30 } 31 32 func NewForceDeleter(delete StoreDeleter) ForceDeleter { 33 return ForceDeleter(delete) 34 }