sqlx: adjust index post service stub interface

pull/351/head
Michael Li 2 years ago
parent f7d9a40184
commit d8b009ee3d
No known key found for this signature in database

@ -11,43 +11,88 @@ import (
) )
var ( var (
_ core.IndexPostsService = (*indexPostsServant)(nil) _ core.IndexPostsService = (*friendIndexServant)(nil)
_ core.IndexPostsService = (*followIndexServant)(nil)
_ core.IndexPostsService = (*lightIndexServant)(nil)
_ core.IndexPostsService = (*simpleIndexPostsServant)(nil) _ core.IndexPostsService = (*simpleIndexPostsServant)(nil)
) )
type indexPostsServant struct { type friendIndexServant struct {
*sqlxServant *sqlxServant
ams core.AuthorizationManageService
ths core.TweetHelpService
stmtIndex *sqlx.Stmt
}
type followIndexServant struct {
*sqlxServant
ths core.TweetHelpService
stmtIndex *sqlx.Stmt
}
type lightIndexServant struct {
*sqlxServant
ths core.TweetHelpService
stmtIndex *sqlx.Stmt stmtIndex *sqlx.Stmt
} }
type simpleIndexPostsServant struct { type simpleIndexPostsServant struct {
*sqlxServant *sqlxServant
ths core.TweetHelpService
stmtIndex *sqlx.Stmt stmtIndex *sqlx.Stmt
} }
// IndexPosts 根据userId查询广场推文列表简单做到不同用户的主页都是不同的 // IndexPosts 根据userId查询广场推文列表简单做到不同用户的主页都是不同的
func (s *indexPostsServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { 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 *lightIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) {
// TODO // TODO
debug.NotImplemented() return nil, debug.ErrNotImplemented
return nil, nil
} }
// simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数 // simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数
func (s *simpleIndexPostsServant) IndexPosts(_user *core.User, offset int, limit int) (*core.IndexTweetList, error) { func (s *simpleIndexPostsServant) IndexPosts(_user *core.User, offset int, limit int) (*core.IndexTweetList, error) {
// TODO // TODO
debug.NotImplemented() return nil, debug.ErrNotImplemented
return nil, nil }
func newFriendIndexService(db *sqlx.DB, ams core.AuthorizationManageService, ths core.TweetHelpService) core.IndexPostsService {
return &friendIndexServant{
ams: ams,
sqlxServant: newSqlxServant(db),
stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`),
}
}
func newFollowIndexService(db *sqlx.DB, ths core.TweetHelpService) core.IndexPostsService {
return &followIndexServant{
ths: ths,
sqlxServant: newSqlxServant(db),
stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`),
}
} }
func newIndexPostsService(db *sqlx.DB) core.IndexPostsService { func newLightIndexService(db *sqlx.DB, ths core.TweetHelpService) core.IndexPostsService {
return &indexPostsServant{ return &lightIndexServant{
ths: ths,
sqlxServant: newSqlxServant(db), sqlxServant: newSqlxServant(db),
stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`), stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`),
} }
} }
func newSimpleIndexPostsService(db *sqlx.DB) core.IndexPostsService { func newSimpleIndexPostsService(db *sqlx.DB, ths core.TweetHelpService) core.IndexPostsService {
return &simpleIndexPostsServant{ return &simpleIndexPostsServant{
ths: ths,
sqlxServant: newSqlxServant(db), sqlxServant: newSqlxServant(db),
stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`), stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`),
} }

@ -35,33 +35,48 @@ type dataServant struct {
} }
func NewDataService() (core.DataService, core.VersionInfo) { func NewDataService() (core.DataService, core.VersionInfo) {
// initialize CacheIndex if needed
var ( var (
c core.CacheIndexService v core.VersionInfo
v core.VersionInfo cis core.CacheIndexService
ips core.IndexPostsService
) )
db := sqlxDB() db := sqlxDB()
pvs := security.NewPhoneVerifyService() 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") { if cfg.If("SimpleCacheIndex") {
i = newSimpleIndexPostsService(db) // simpleCache use special post index service
c, v = cache.NewSimpleCacheIndexService(i) ips = newSimpleIndexPostsService(db, ths)
cis, v = cache.NewSimpleCacheIndexService(ips)
} else if cfg.If("BigCacheIndex") { } else if cfg.If("BigCacheIndex") {
a := newAuthorizationManageService(db) // TODO: make cache index post in different scence like friendship/followship/lightship
c, v = cache.NewBigCacheIndexService(i, a) cis, v = cache.NewBigCacheIndexService(ips, ams)
} else { } 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()) logrus.Infof("use %s as cache index service by version: %s", v.Name(), v.Version())
ds := &dataServant{ ds := &dataServant{
IndexPostsService: c, IndexPostsService: cis,
WalletService: newWalletService(db), WalletService: newWalletService(db),
MessageService: newMessageService(db), MessageService: newMessageService(db),
TopicService: newTopicService(db), TopicService: newTopicService(db),
TweetService: newTweetService(db), TweetService: newTweetService(db),
TweetManageService: newTweetManageService(db, c), TweetManageService: newTweetManageService(db, cis),
TweetHelpService: newTweetHelpService(db), TweetHelpService: newTweetHelpService(db),
CommentService: newCommentService(db), CommentService: newCommentService(db),
CommentManageService: newCommentManageService(db), CommentManageService: newCommentManageService(db),

@ -2,9 +2,6 @@
// Use of this source code is governed by a MIT style // Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// Core service implement base sqlx+mysql. All sub-service
// will declare here and provide initial function.
package sakila package sakila
import ( import (

Loading…
Cancel
Save