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  }