// Copyright 2023 ROC. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. package sakila import ( "github.com/bitbus/sqlx" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core/ms" "github.com/rocboss/paopao-ce/internal/dao/sakila/auto/cc" "github.com/sirupsen/logrus" ) var ( _ core.IndexPostsService = (*shipIndexSrv)(nil) _ core.IndexPostsService = (*simpleIndexPostsSrv)(nil) ) type shipIndexSrv struct { *sqlxSrv ams core.AuthorizationManageService ths core.TweetHelpService q *cc.ShipIndex } type simpleIndexPostsSrv struct { *sqlxSrv ths core.TweetHelpService q *cc.SimpleIndex } // IndexPosts 根据userId查询广场推文列表,简单做到不同用户的主页都是不同的; func (s *shipIndexSrv) IndexPosts(user *ms.User, offset int, limit int) (res *ms.IndexTweetList, err error) { var posts []*ms.Post res = &ms.IndexTweetList{} switch { case user == nil: if err = s.q.IndexByGuest.Select(&posts, limit, offset); err == nil { err = s.q.IndexCountByGuest.Get(&res.Total) } case user != nil && user.IsAdmin: if err = s.q.IndexByAdmin.Select(&posts, limit, offset); err == nil { err = s.q.IndexCountByAdmin.Get(&res.Total) } default: friendIds, _ := s.ams.BeFriendIds(user.ID) friendIds = append(friendIds, user.ID) err = s.db.InSelect(&posts, s.q.IndexBySelf, user.ID, friendIds, limit, offset) if err == nil { err = s.db.InGet(&res.Total, s.q.IndexCountBySelf, user.ID, friendIds) } } if err != nil { logrus.Debugf("shipIndex.IndexPosts err: %s", err) return } if res.Tweets, err = s.ths.MergePosts(posts); err != nil { logrus.Debugf("shipIndex.IndexPosts merge posts err: %s", err) return } return } // simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数 func (s *simpleIndexPostsSrv) IndexPosts(_user *ms.User, offset int, limit int) (res *ms.IndexTweetList, err error) { var posts []*ms.Post res = &ms.IndexTweetList{} if err = s.q.Index.Select(&posts, limit, offset); err == nil { err = s.q.IndexCount.Get(&res.Total) } if err != nil { logrus.Debugf("simpleIndexPostsSrv.IndexPosts err: %s", err) return } if res.Tweets, err = s.ths.MergePosts(posts); err != nil { logrus.Debugf("shipIndex.IndexPosts merge posts err: %s", err) return } return } func newShipIndexService(db *sqlx.DB, ams core.AuthorizationManageService, ths core.TweetHelpService) core.IndexPostsService { return &shipIndexSrv{ ams: ams, ths: ths, sqlxSrv: newSqlxSrv(db), q: ccBuild(db, cc.BuildShipIndex), } } func newSimpleIndexPostsService(db *sqlx.DB, ths core.TweetHelpService) core.IndexPostsService { return &simpleIndexPostsSrv{ ths: ths, sqlxSrv: newSqlxSrv(db), q: ccBuild(db, cc.BuildSimpleIndex), } }