diff --git a/internal/dao/slonik/index.go b/internal/dao/slonik/index.go index 373a54c6..2ae7cf8c 100644 --- a/internal/dao/slonik/index.go +++ b/internal/dao/slonik/index.go @@ -11,40 +11,81 @@ import ( ) var ( - _ core.IndexPostsService = (*indexPostsServant)(nil) + _ core.IndexPostsService = (*friendIndexServant)(nil) + _ core.IndexPostsService = (*followIndexServant)(nil) + _ core.IndexPostsService = (*lightIndexServant)(nil) _ core.IndexPostsService = (*simpleIndexPostsServant)(nil) ) -type indexPostsServant struct { +type friendIndexServant struct { *pgxServant + ams core.AuthorizationManageService + ths core.TweetHelpService +} + +type followIndexServant struct { + *pgxServant + ths core.TweetHelpService +} + +type lightIndexServant struct { + *pgxServant + ths core.TweetHelpService } type simpleIndexPostsServant struct { *pgxServant + ths core.TweetHelpService +} + +// IndexPosts 根据userId查询广场推文列表,简单做到不同用户的主页都是不同的; +func (s *friendIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { + // TODO + return nil, debug.ErrNotImplemented +} + +// IndexPosts 根据userId查询广场推文列表,简单做到不同用户的主页都是不同的; +func (s *followIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { + // TODO + return nil, debug.ErrNotImplemented } // IndexPosts 根据userId查询广场推文列表,简单做到不同用户的主页都是不同的; -func (s *indexPostsServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { +func (s *lightIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { // TODO - debug.NotImplemented() - return nil, nil + return nil, debug.ErrNotImplemented } // simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数 func (s *simpleIndexPostsServant) IndexPosts(_user *core.User, offset int, limit int) (*core.IndexTweetList, error) { // TODO - debug.NotImplemented() - return nil, nil + return nil, debug.ErrNotImplemented +} + +func newFriendIndexService(db *pgx.Conn, ams core.AuthorizationManageService, ths core.TweetHelpService) core.IndexPostsService { + return &friendIndexServant{ + ams: ams, + pgxServant: newPgxServant(db), + } +} + +func newFollowIndexService(db *pgx.Conn, ths core.TweetHelpService) core.IndexPostsService { + return &followIndexServant{ + ths: ths, + pgxServant: newPgxServant(db), + } } -func newIndexPostsService(db *pgx.Conn) core.IndexPostsService { - return &indexPostsServant{ +func newLightIndexService(db *pgx.Conn, ths core.TweetHelpService) core.IndexPostsService { + return &lightIndexServant{ + ths: ths, pgxServant: newPgxServant(db), } } -func newSimpleIndexPostsService(db *pgx.Conn) core.IndexPostsService { +func newSimpleIndexPostsService(db *pgx.Conn, ths core.TweetHelpService) core.IndexPostsService { return &simpleIndexPostsServant{ + ths: ths, pgxServant: newPgxServant(db), } } diff --git a/internal/dao/slonik/slonik.go b/internal/dao/slonik/slonik.go index ac2f20d1..be7ba004 100644 --- a/internal/dao/slonik/slonik.go +++ b/internal/dao/slonik/slonik.go @@ -35,33 +35,48 @@ type dataServant struct { } func NewDataService() (core.DataService, core.VersionInfo) { - // initialize CacheIndex if needed var ( - c core.CacheIndexService - v core.VersionInfo + v core.VersionInfo + cis core.CacheIndexService + ips core.IndexPostsService ) db := pgxDB() pvs := security.NewPhoneVerifyService() + ams := NewAuthorizationManageService() + ths := newTweetHelpService(db) - i := newIndexPostsService(db) + // initialize core.IndexPostsService + if cfg.If("Friendship") { + ips = newFriendIndexService(db, ams, ths) + } else if cfg.If("Followship") { + ips = newFollowIndexService(db, ths) + } else if cfg.If("Lightship") { + ips = newLightIndexService(db, ths) + } else { + // default use lightship post index service + ips = newLightIndexService(db, ths) + } + + // initialize core.CacheIndexService if cfg.If("SimpleCacheIndex") { - i = newSimpleIndexPostsService(db) - c, v = cache.NewSimpleCacheIndexService(i) + // simpleCache use special post index service + ips = newSimpleIndexPostsService(db, ths) + cis, v = cache.NewSimpleCacheIndexService(ips) } else if cfg.If("BigCacheIndex") { - a := newAuthorizationManageService(db) - c, v = cache.NewBigCacheIndexService(i, a) + // TODO: make cache index post in different scence like friendship/followship/lightship + cis, v = cache.NewBigCacheIndexService(ips, ams) } else { - c, v = cache.NewNoneCacheIndexService(i) + cis, v = cache.NewNoneCacheIndexService(ips) } logrus.Infof("use %s as cache index service by version: %s", v.Name(), v.Version()) ds := &dataServant{ - IndexPostsService: c, + IndexPostsService: cis, WalletService: newWalletService(db), MessageService: newMessageService(db), TopicService: newTopicService(db), TweetService: newTweetService(db), - TweetManageService: newTweetManageService(db, c), + TweetManageService: newTweetManageService(db, cis), TweetHelpService: newTweetHelpService(db), CommentService: newCommentService(db), CommentManageService: newCommentManageService(db),