service.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "go-common/app/interface/bbq/bullet/api"
  6. "go-common/app/interface/bbq/bullet/internal/conf"
  7. "go-common/app/interface/bbq/bullet/internal/dao"
  8. video "go-common/app/service/bbq/video/api/grpc/v1"
  9. "go-common/library/ecode"
  10. "go-common/library/log"
  11. )
  12. // Service struct
  13. type Service struct {
  14. c *conf.Config
  15. dao *dao.Dao
  16. }
  17. // New init
  18. func New(c *conf.Config) (s *Service) {
  19. s = &Service{
  20. c: c,
  21. dao: dao.New(c),
  22. }
  23. return s
  24. }
  25. // Ping Service
  26. func (s *Service) Ping(ctx context.Context) (err error) {
  27. return s.dao.Ping(ctx)
  28. }
  29. // Close Service
  30. func (s *Service) Close() {
  31. s.dao.Close()
  32. }
  33. // ContentGet .
  34. func (s *Service) ContentGet(ctx context.Context, req *api.ListBulletReq) (res []*api.Bullet, err error) {
  35. videoBase, err := s.dao.VideoBase(ctx, req.Oid)
  36. if err != nil {
  37. log.Warnw(ctx, "log", "get video base fail", "err", err, "req", req)
  38. return
  39. }
  40. if video.IsLimitSet(videoBase.Limits, video.VideoLimitBitBullet) {
  41. log.Infow(ctx, "log", "video limit is set")
  42. return []*api.Bullet{}, nil
  43. }
  44. if res, err = s.dao.ContentGet(ctx, req); err != nil {
  45. log.Warnv(ctx, log.KV("log", "content get fail"))
  46. return
  47. }
  48. return
  49. }
  50. // ContentList .
  51. func (s *Service) ContentList(ctx context.Context, req *api.ListBulletReq) (res *api.ListBulletReply, err error) {
  52. videoBase, err := s.dao.VideoBase(ctx, req.Oid)
  53. if err != nil {
  54. log.Warnw(ctx, "log", "get video base fail", "err", err, "req", req)
  55. return
  56. }
  57. if video.IsLimitSet(videoBase.Limits, video.VideoLimitBitBullet) {
  58. log.Infow(ctx, "log", "video limit is set")
  59. return &api.ListBulletReply{}, nil
  60. }
  61. if res, err = s.dao.ContentList(ctx, req); err != nil {
  62. log.Warnv(ctx, log.KV("log", "get content list fail"))
  63. return
  64. }
  65. return
  66. }
  67. // ContentPost .
  68. func (s *Service) ContentPost(ctx context.Context, req *api.Bullet) (dmid int64, err error) {
  69. videoBase, err := s.dao.VideoBase(ctx, req.Oid)
  70. if err != nil {
  71. log.Warnw(ctx, "log", "get video base fail", "err", err, "req", req)
  72. return
  73. }
  74. if video.IsLimitSet(videoBase.Limits, video.VideoLimitBitBullet) {
  75. log.Infow(ctx, "log", "video limit is set")
  76. err = ecode.DanmuLimitErr
  77. return
  78. }
  79. // 屏蔽词
  80. level, filterErr := s.dao.Filter(ctx, req.Content, dao.FilterAreaDanmu)
  81. if filterErr != nil {
  82. log.Errorv(ctx, log.KV("log", "filter fail"))
  83. } else if level >= dao.FilterLevel {
  84. err = ecode.FilterErr
  85. log.Warnv(ctx, log.KV("log", fmt.Sprintf("content filter fail: content=%s, level=%d", req.Content, level)))
  86. return
  87. }
  88. // 发布弹幕
  89. dmid, err = s.dao.ContentPost(ctx, req)
  90. if err != nil {
  91. log.Warnv(ctx, log.KV("log", "publish danmu fail"))
  92. return
  93. }
  94. return
  95. }
  96. //PhoneCheck ..
  97. func (s *Service) PhoneCheck(c context.Context, mid int64) (err error) {
  98. telStatus, err := s.dao.PhoneCheck(c, mid)
  99. if err != nil {
  100. log.Errorw(c, "log", "call phone check fail", "mid", mid)
  101. return
  102. }
  103. if telStatus == 0 {
  104. err = ecode.BBQNoBindPhone
  105. log.Infow(c, "log", "no bind phone", "mid", mid)
  106. return
  107. }
  108. return
  109. }