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 }