123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package service
- import (
- "context"
- "fmt"
- "go-common/app/interface/bbq/bullet/api"
- "go-common/app/interface/bbq/bullet/internal/conf"
- "go-common/app/interface/bbq/bullet/internal/dao"
- video "go-common/app/service/bbq/video/api/grpc/v1"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- // Service struct
- type Service struct {
- c *conf.Config
- dao *dao.Dao
- }
- // New init
- func New(c *conf.Config) (s *Service) {
- s = &Service{
- c: c,
- dao: dao.New(c),
- }
- return s
- }
- // Ping Service
- func (s *Service) Ping(ctx context.Context) (err error) {
- return s.dao.Ping(ctx)
- }
- // Close Service
- func (s *Service) Close() {
- s.dao.Close()
- }
- // ContentGet .
- func (s *Service) ContentGet(ctx context.Context, req *api.ListBulletReq) (res []*api.Bullet, err error) {
- videoBase, err := s.dao.VideoBase(ctx, req.Oid)
- if err != nil {
- log.Warnw(ctx, "log", "get video base fail", "err", err, "req", req)
- return
- }
- if video.IsLimitSet(videoBase.Limits, video.VideoLimitBitBullet) {
- log.Infow(ctx, "log", "video limit is set")
- return []*api.Bullet{}, nil
- }
- if res, err = s.dao.ContentGet(ctx, req); err != nil {
- log.Warnv(ctx, log.KV("log", "content get fail"))
- return
- }
- return
- }
- // ContentList .
- func (s *Service) ContentList(ctx context.Context, req *api.ListBulletReq) (res *api.ListBulletReply, err error) {
- videoBase, err := s.dao.VideoBase(ctx, req.Oid)
- if err != nil {
- log.Warnw(ctx, "log", "get video base fail", "err", err, "req", req)
- return
- }
- if video.IsLimitSet(videoBase.Limits, video.VideoLimitBitBullet) {
- log.Infow(ctx, "log", "video limit is set")
- return &api.ListBulletReply{}, nil
- }
- if res, err = s.dao.ContentList(ctx, req); err != nil {
- log.Warnv(ctx, log.KV("log", "get content list fail"))
- return
- }
- return
- }
- // ContentPost .
- func (s *Service) ContentPost(ctx context.Context, req *api.Bullet) (dmid int64, err error) {
- videoBase, err := s.dao.VideoBase(ctx, req.Oid)
- if err != nil {
- log.Warnw(ctx, "log", "get video base fail", "err", err, "req", req)
- return
- }
- if video.IsLimitSet(videoBase.Limits, video.VideoLimitBitBullet) {
- log.Infow(ctx, "log", "video limit is set")
- err = ecode.DanmuLimitErr
- return
- }
- // 屏蔽词
- level, filterErr := s.dao.Filter(ctx, req.Content, dao.FilterAreaDanmu)
- if filterErr != nil {
- log.Errorv(ctx, log.KV("log", "filter fail"))
- } else if level >= dao.FilterLevel {
- err = ecode.FilterErr
- log.Warnv(ctx, log.KV("log", fmt.Sprintf("content filter fail: content=%s, level=%d", req.Content, level)))
- return
- }
- // 发布弹幕
- dmid, err = s.dao.ContentPost(ctx, req)
- if err != nil {
- log.Warnv(ctx, log.KV("log", "publish danmu fail"))
- return
- }
- return
- }
- //PhoneCheck ..
- func (s *Service) PhoneCheck(c context.Context, mid int64) (err error) {
- telStatus, err := s.dao.PhoneCheck(c, mid)
- if err != nil {
- log.Errorw(c, "log", "call phone check fail", "mid", mid)
- return
- }
- if telStatus == 0 {
- err = ecode.BBQNoBindPhone
- log.Infow(c, "log", "no bind phone", "mid", mid)
- return
- }
- return
- }
|