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

     1  package deletable
     2  
     3  import (
     4  	"github.com/jmoiron/sqlx"
     5  	"github.com/k0marov/go-socnet/core/abstract/deletable/service"
     6  	"github.com/k0marov/go-socnet/core/abstract/deletable/store/sql_db"
     7  	"github.com/k0marov/go-socnet/core/abstract/ownable"
     8  	"github.com/k0marov/go-socnet/core/abstract/table_name"
     9  	"github.com/k0marov/go-socnet/core/general/core_err"
    10  )
    11  
    12  type (
    13  	Deleter      = service.Deleter
    14  	ForceDeleter = service.ForceDeleter
    15  )
    16  
    17  type deletable struct {
    18  	Delete      Deleter
    19  	ForceDelete ForceDeleter
    20  }
    21  
    22  func NewDeletable(db *sqlx.DB, tableName table_name.TableName, ownerGetter ownable.OwnerGetter) (deletable, error) {
    23  	// store
    24  	sqlDB, err := sql_db.NewSqlDB(db, tableName)
    25  	if err != nil {
    26  		return deletable{}, core_err.Rethrow("opening sql db for Deletable", err)
    27  	}
    28  	// service
    29  	deleter := service.NewDeleter(ownerGetter, sqlDB.Delete)
    30  	forceDeleter := service.NewForceDeleter(sqlDB.Delete)
    31  
    32  	return deletable{
    33  		Delete:      deleter,
    34  		ForceDelete: forceDeleter,
    35  	}, nil
    36  }