mirror of https://github.com/rocboss/paopao-ce
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.2 KiB
197 lines
5.2 KiB
// 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 (
|
|
"sync"
|
|
|
|
"github.com/Masterminds/semver/v3"
|
|
"github.com/alimy/cfg"
|
|
"github.com/rocboss/paopao-ce/internal/conf"
|
|
"github.com/rocboss/paopao-ce/internal/core"
|
|
"github.com/rocboss/paopao-ce/internal/dao/cache"
|
|
"github.com/rocboss/paopao-ce/internal/dao/security"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
_ core.DataService = (*dataSrv)(nil)
|
|
_ core.VersionInfo = (*dataSrv)(nil)
|
|
|
|
_ core.WebDataServantA = (*webDataSrvA)(nil)
|
|
_ core.VersionInfo = (*webDataSrvA)(nil)
|
|
|
|
_onceInitial sync.Once
|
|
)
|
|
|
|
type dataSrv struct {
|
|
core.IndexPostsService
|
|
core.WalletService
|
|
core.MessageService
|
|
core.TopicService
|
|
core.TweetService
|
|
core.TweetManageService
|
|
core.TweetHelpService
|
|
core.CommentService
|
|
core.CommentManageService
|
|
core.UserManageService
|
|
core.ContactManageService
|
|
core.FollowingManageService
|
|
core.SecurityService
|
|
core.AttachmentCheckService
|
|
}
|
|
|
|
type webDataSrvA struct {
|
|
core.TopicServantA
|
|
core.TweetServantA
|
|
core.TweetManageServantA
|
|
core.TweetHelpServantA
|
|
}
|
|
|
|
func NewDataService() (core.DataService, core.VersionInfo) {
|
|
lazyInitial()
|
|
|
|
var (
|
|
v core.VersionInfo
|
|
cis core.CacheIndexService
|
|
ips core.IndexPostsService
|
|
)
|
|
pvs := security.NewPhoneVerifyService()
|
|
ams := NewAuthorizationManageService()
|
|
ths := newTweetHelpService(_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
|
|
cfg.On(cfg.Actions{
|
|
"SimpleCacheIndex": func() {
|
|
// simpleCache use special post index service
|
|
ips = newSimpleIndexPostsService(_db, ths)
|
|
cis, v = cache.NewSimpleCacheIndexService(ips)
|
|
},
|
|
"BigCacheIndex": func() {
|
|
// TODO: make cache index post in different scence like friendship/followship/lightship
|
|
cis, v = cache.NewBigCacheIndexService(ips, ams)
|
|
},
|
|
"RedisCacheIndex": func() {
|
|
cis, v = cache.NewRedisCacheIndexService(ips, ams)
|
|
},
|
|
}, func() {
|
|
// defualt no cache
|
|
cis, v = cache.NewNoneCacheIndexService(ips)
|
|
})
|
|
logrus.Infof("use %s as cache index service by version: %s", v.Name(), v.Version())
|
|
|
|
ds := &dataSrv{
|
|
IndexPostsService: cis,
|
|
WalletService: newWalletService(_db),
|
|
MessageService: newMessageService(_db),
|
|
TopicService: newTopicService(_db),
|
|
TweetService: newTweetService(_db),
|
|
TweetManageService: newTweetManageService(_db, cis),
|
|
TweetHelpService: newTweetHelpService(_db),
|
|
CommentService: newCommentService(_db),
|
|
CommentManageService: newCommentManageService(_db),
|
|
UserManageService: newUserManageService(_db),
|
|
ContactManageService: newContactManageService(_db),
|
|
FollowingManageService: newFollowingManageService(_db),
|
|
SecurityService: newSecurityService(_db, pvs),
|
|
AttachmentCheckService: security.NewAttachmentCheckService(),
|
|
}
|
|
return ds, ds
|
|
}
|
|
|
|
func NewWebDataServantA() (core.WebDataServantA, core.VersionInfo) {
|
|
lazyInitial()
|
|
|
|
var (
|
|
v core.VersionInfo
|
|
cis core.CacheIndexService
|
|
ips core.IndexPostsService
|
|
)
|
|
// pvs := security.NewPhoneVerifyService()
|
|
ams := NewAuthorizationManageService()
|
|
ths := newTweetHelpService(_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
|
|
cfg.On(cfg.Actions{
|
|
"SimpleCacheIndex": func() {
|
|
// simpleCache use special post index service
|
|
ips = newSimpleIndexPostsService(_db, ths)
|
|
cis, v = cache.NewSimpleCacheIndexService(ips)
|
|
},
|
|
"BigCacheIndex": func() {
|
|
// TODO: make cache index post in different scence like friendship/followship/lightship
|
|
cis, v = cache.NewBigCacheIndexService(ips, ams)
|
|
},
|
|
"RedisCacheIndex": func() {
|
|
cis, v = cache.NewRedisCacheIndexService(ips, ams)
|
|
},
|
|
}, func() {
|
|
// defualt no cache
|
|
cis, v = cache.NewNoneCacheIndexService(ips)
|
|
})
|
|
logrus.Infof("use %s as cache index service by version: %s", v.Name(), v.Version())
|
|
|
|
db := conf.MustSqlxDB()
|
|
ds := &webDataSrvA{
|
|
TopicServantA: newTopicServantA(db),
|
|
TweetServantA: newTweetServantA(db),
|
|
TweetManageServantA: newTweetManageServantA(db, cis),
|
|
TweetHelpServantA: newTweetHelpServantA(db),
|
|
}
|
|
return ds, ds
|
|
}
|
|
|
|
func NewAuthorizationManageService() core.AuthorizationManageService {
|
|
lazyInitial()
|
|
return newAuthorizationManageService(_db)
|
|
}
|
|
|
|
func (s *dataSrv) Name() string {
|
|
return "Sqlx"
|
|
}
|
|
|
|
func (s *dataSrv) Version() *semver.Version {
|
|
return semver.MustParse("v0.1.0")
|
|
}
|
|
|
|
func (s *webDataSrvA) Name() string {
|
|
return "Sqlx"
|
|
}
|
|
|
|
func (s *webDataSrvA) Version() *semver.Version {
|
|
return semver.MustParse("v0.0.1")
|
|
}
|
|
|
|
// lazyInitial do some package lazy initialize for performance
|
|
func lazyInitial() {
|
|
_onceInitial.Do(func() {
|
|
initSqlxDB()
|
|
})
|
|
}
|