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

     1  package likeable
     2  
     3  import (
     4  	"github.com/jmoiron/sqlx"
     5  	"github.com/k0marov/go-socnet/core/abstract/likeable/service"
     6  	"github.com/k0marov/go-socnet/core/abstract/likeable/store/sql_db"
     7  	"github.com/k0marov/go-socnet/core/abstract/table_name"
     8  	"github.com/k0marov/go-socnet/core/general/core_err"
     9  )
    10  
    11  type (
    12  	LikeToggler          = service.LikeToggler
    13  	LikeChecker          = service.LikeChecker
    14  	LikesCountGetter     = service.LikesCountGetter
    15  	UserLikesCountGetter = service.UserLikesCountGetter
    16  	UserLikesGetter      = service.UserLikesGetter
    17  )
    18  
    19  type likeable struct {
    20  	ToggleLike        LikeToggler
    21  	IsLiked           LikeChecker
    22  	GetLikesCount     LikesCountGetter
    23  	GetUserLikesCount UserLikesCountGetter
    24  	GetUserLikes      UserLikesGetter
    25  }
    26  
    27  func NewLikeable(db *sqlx.DB, targetTableName table_name.TableName) (likeable, error) {
    28  	// store
    29  	store, err := sql_db.NewSqlDB(db, targetTableName)
    30  	if err != nil {
    31  		return likeable{}, core_err.Rethrow("opening the likeable sql db", err)
    32  	}
    33  	// service
    34  	toggleLike := service.NewLikeToggler(store.IsLiked, store.Like, store.Unlike)
    35  	isLiked := service.NewLikeChecker(store.IsLiked)
    36  	getLikesCount := service.NewLikesCountGetter(store.GetLikesCount)
    37  	getUserLikesCount := service.NewUserLikesCountGetter(store.GetUserLikesCount)
    38  	getUserLikes := service.NewUserLikesGetter(store.GetUserLikes)
    39  	return likeable{
    40  		ToggleLike:        toggleLike,
    41  		IsLiked:           isLiked,
    42  		GetLikesCount:     getLikesCount,
    43  		GetUserLikesCount: getUserLikesCount,
    44  		GetUserLikes:      getUserLikes,
    45  	}, nil
    46  }