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.
138 lines
3.7 KiB
138 lines
3.7 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"go-common/app/interface/main/space/conf" |
|
"go-common/app/interface/main/space/dao" |
|
tagrpc "go-common/app/interface/main/tag/rpc/client" |
|
artrpc "go-common/app/interface/openplatform/article/rpc/client" |
|
accclient "go-common/app/service/main/account/api" |
|
accwar "go-common/app/service/main/account/api" |
|
accmdl "go-common/app/service/main/account/model" |
|
arcclient "go-common/app/service/main/archive/api" |
|
assrpc "go-common/app/service/main/assist/rpc/client" |
|
coinclient "go-common/app/service/main/coin/api" |
|
favrpc "go-common/app/service/main/favorite/api/gorpc" |
|
fltrpc "go-common/app/service/main/filter/rpc/client" |
|
member "go-common/app/service/main/member/api/gorpc" |
|
"go-common/app/service/main/relation/rpc/client" |
|
thumbup "go-common/app/service/main/thumbup/rpc/client" |
|
upclient "go-common/app/service/main/up/api/v1" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
"go-common/library/sync/pipeline/fanout" |
|
) |
|
|
|
// Service service struct. |
|
type Service struct { |
|
c *conf.Config |
|
dao *dao.Dao |
|
// rpc |
|
art *artrpc.Service |
|
ass *assrpc.Service |
|
tag *tagrpc.Service |
|
filter *fltrpc.Service |
|
fav *favrpc.Service |
|
thumbup *thumbup.Service |
|
relation *relation.Service |
|
member *member.Service |
|
// grpc |
|
accClient accwar.AccountClient |
|
arcClient arcclient.ArchiveClient |
|
coinClient coinclient.CoinClient |
|
upClient upclient.UpClient |
|
// cache proc |
|
cache *fanout.Fanout |
|
// noNoticeMids |
|
noNoticeMids map[int64]struct{} |
|
BlacklistValue map[int64]struct{} |
|
} |
|
|
|
// New new service. |
|
func New(c *conf.Config) *Service { |
|
s := &Service{ |
|
c: c, |
|
dao: dao.New(c), |
|
art: artrpc.New(c.ArticleRPC), |
|
ass: assrpc.New(c.AssistRPC), |
|
tag: tagrpc.New2(c.TagRPC), |
|
fav: favrpc.New2(c.FavoriteRPC), |
|
filter: fltrpc.New(c.FilterRPC), |
|
thumbup: thumbup.New(c.ThumbupRPC), |
|
relation: relation.New(c.RelationRPC), |
|
member: member.New(c.MemberRPC), |
|
cache: fanout.New("cache"), |
|
} |
|
var err error |
|
if s.accClient, err = accclient.NewClient(c.AccClient); err != nil { |
|
panic(err) |
|
} |
|
if s.arcClient, err = arcclient.NewClient(c.ArcClient); err != nil { |
|
panic(err) |
|
} |
|
if s.coinClient, err = coinclient.NewClient(c.CoinClient); err != nil { |
|
panic(err) |
|
} |
|
if s.upClient, err = upclient.NewClient(c.UpClient); err != nil { |
|
panic(err) |
|
} |
|
s.initMids() |
|
go s.loadBlacklist() |
|
return s |
|
} |
|
|
|
// Ping ping service |
|
func (s *Service) Ping(c context.Context) (err error) { |
|
if err = s.dao.Ping(c); err != nil { |
|
log.Error("s.dao.Ping error(%v)", err) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) initMids() { |
|
tmp := make(map[int64]struct{}, len(s.c.Rule.NoNoticeMids)) |
|
for _, id := range s.c.Rule.NoNoticeMids { |
|
tmp[id] = struct{}{} |
|
} |
|
s.noNoticeMids = tmp |
|
} |
|
|
|
func (s *Service) realName(c context.Context, mid int64) (profile *accmdl.Profile, err error) { |
|
var reply *accwar.ProfileReply |
|
if reply, err = s.accClient.Profile3(c, &accwar.MidReq{Mid: mid}); err != nil || reply == nil { |
|
log.Error("s.accClient.Profile3(%d) error(%v)", mid, err) |
|
return |
|
} |
|
profile = reply.Profile |
|
if !s.c.Rule.RealNameOn { |
|
return |
|
} |
|
if profile.Identification == 0 && profile.TelStatus == 0 { |
|
err = ecode.UserCheckNoPhone |
|
return |
|
} |
|
if profile.Identification == 0 && profile.TelStatus == 2 { |
|
err = ecode.UserCheckInvalidPhone |
|
return |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) privacyCheck(c context.Context, vmid int64, field string) (err error) { |
|
privacy := s.privacy(c, vmid) |
|
if value, ok := privacy[field]; !ok || value != _defaultPrivacy { |
|
err = ecode.SpaceNoPrivacy |
|
return |
|
} |
|
return |
|
} |
|
|
|
// loadBlacklist load spack blacklist |
|
func (s *Service) loadBlacklist() { |
|
for { |
|
time.Sleep(time.Duration(conf.Conf.Rule.BlackFre)) |
|
s.Blacklist(context.Background()) |
|
} |
|
}
|
|
|