123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- package service
- import (
- "context"
- "time"
- "go-common/app/interface/main/dm2/model"
- account "go-common/app/service/main/account/api"
- "go-common/app/service/main/archive/api"
- archive "go-common/app/service/main/archive/model/archive"
- filterCli "go-common/app/service/main/filter/api/grpc/v1"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- const (
- _filterArea = "subtitle"
- )
- // SubtitleFilter .
- func (s *Service) SubtitleFilter(c context.Context, words string) (hit []string, err error) {
- var (
- reply *filterCli.HitReply
- )
- if len(words) > model.SubtitleContentSizeLimit {
- err = ecode.SubtitleSizeLimit
- return
- }
- if reply, err = s.filterRPC.Hit(c, &filterCli.HitReq{
- Area: _filterArea,
- Msg: words,
- }); err != nil {
- log.Error("SubtitleFilter(params:%+v),error(%v)", words, err)
- return
- }
- hit = reply.Hits
- return
- }
- // SubtitlePermission .
- func (s *Service) SubtitlePermission(c context.Context, aid int64, oid int64, tp int32, mid int64) (err error) {
- var (
- subject *model.Subject
- )
- if subject, err = s.subject(c, tp, oid); err != nil {
- log.Error("params(tp:%v,oid:%v).error(%v)", tp, oid, err)
- return
- }
- if s.checkAidOid(c, aid, oid); err != nil {
- return
- }
- if err = s.checkSubtitlePermission(c, aid, oid, tp, mid, subject); err != nil {
- return
- }
- return
- }
- // DelSubtitle .
- func (s *Service) DelSubtitle(c context.Context, oid int64, subtitleID int64, mid int64) (err error) {
- var (
- subtitle *model.Subtitle
- )
- if subtitle, err = s.getSubtitle(c, oid, subtitleID); err != nil {
- log.Error("params(oid:%v, subtitleID:%v) error(%v)", oid, subtitleID, err)
- return
- }
- if subtitle == nil {
- err = ecode.NothingFound
- return
- }
- if subtitle.Mid != mid {
- err = ecode.SubtitlePermissionDenied
- return
- }
- if subtitle.Status != model.SubtitleStatusDraft &&
- subtitle.Status != model.SubtitleStatusToAudit &&
- subtitle.Status != model.SubtitleStatusAuditBack &&
- subtitle.Status != model.SubtitleStatusManagerBack {
- err = ecode.SubtitleDelUnExist
- return
- }
- subtitle.Status = model.SubtitleStatusRemove
- subtitle.PubTime = time.Now().Unix()
- if err = s.updateSubtitle(c, subtitle); err != nil {
- return
- }
- s.subtitleReportDelete(c, oid, subtitleID)
- return
- }
- // addSubtitle new a subtitle draft
- func (s *Service) addSubtitle(c context.Context, draft *model.Subtitle) (insertID int64, err error) {
- if insertID, err = s.dao.AddSubtitle(c, draft); err != nil {
- log.Error("params(draft:%+v).error(%v)", draft, err)
- return
- }
- s.dao.DelSubtitleDraftCache(context.Background(), draft.Oid, draft.Type, draft.Mid, draft.Lan)
- s.dao.DelSubtitleCache(context.Background(), draft.Oid, draft.ID)
- return
- }
- // updateSubtitle update an exist subtitle
- func (s *Service) updateSubtitle(c context.Context, subtitle *model.Subtitle) (err error) {
- if err = s.dao.UpdateSubtitle(c, subtitle); err != nil {
- log.Error("params(draft:%+v).error(%v)", subtitle, err)
- return
- }
- s.dao.DelSubtitleDraftCache(context.Background(), subtitle.Oid, subtitle.Type, subtitle.Mid, subtitle.Lan)
- s.dao.DelSubtitleCache(context.Background(), subtitle.Oid, subtitle.ID)
- return
- }
- // SubtitleSign .
- func (s *Service) SubtitleSign(c context.Context, oid int64, tp int32, mid int64, subtitleID int64, isSign bool) (err error) {
- var (
- subtitle *model.Subtitle
- )
- if subtitle, err = s.getSubtitle(c, oid, subtitleID); err != nil {
- log.Error("params(oid:%v,subtitleID:%v).error(%v)", oid, subtitleID, err)
- return
- }
- if subtitle == nil {
- err = ecode.NothingFound
- return
- }
- if mid != subtitle.Mid {
- err = ecode.SubtitlePermissionDenied
- return
- }
- if subtitle.Status != model.SubtitleStatusDraft &&
- subtitle.Status != model.SubtitleStatusToAudit &&
- subtitle.Status != model.SubtitleStatusAuditBack &&
- subtitle.Status != model.SubtitleStatusPublish &&
- subtitle.Status != model.SubtitleStatusCheckToAudit &&
- subtitle.Status != model.SubtitleStatusCheckPublish &&
- subtitle.Status != model.SubtitleStatusManagerBack {
- err = ecode.SubtitlePermissionDenied
- return
- }
- subtitle.IsSign = isSign
- if err = s.dao.UpdateSubtitle(c, subtitle); err != nil {
- log.Error("params(%+v).error(%v)", subtitle, err)
- return
- }
- if err = s.dao.DelSubtitleCache(c, oid, subtitleID); err != nil {
- log.Error("DelSubtitleCache.params(oid:%v,subtitleID:%v).error(%v)", oid, subtitleID, err)
- return
- }
- if err = s.dao.DelVideoSubtitleCache(c, oid, tp); err != nil {
- log.Error("DelVideoSubtitleCache.params(oid:%v,tp:%v).error(%v)", oid, tp, err)
- return
- }
- return
- }
- // SubtitleLock .
- func (s *Service) SubtitleLock(c context.Context, oid int64, tp int32, mid int64, subtitleID int64, isLock bool) (err error) {
- var (
- subject *model.Subject
- subtitle *model.Subtitle
- )
- if subtitle, err = s.getSubtitle(c, oid, subtitleID); err != nil {
- log.Error("params(oid:%v,subtitleID:%v).error(%v)", oid, subtitleID, err)
- return
- }
- if subtitle == nil {
- err = ecode.NothingFound
- return
- }
- if subject, err = s.subject(c, tp, oid); err != nil {
- log.Error("params(oid:%v,tp:%v).error(%v)", oid, tp, err)
- return
- }
- if mid != subject.Mid {
- err = ecode.SubtitlePermissionDenied
- return
- }
- if subtitle.Status != model.SubtitleStatusPublish &&
- subtitle.Status != model.SubtitleStatusCheckPublish {
- err = ecode.SubtitleNotPublish
- return
- }
- subtitle.IsLock = isLock
- if err = s.dao.UpdateSubtitle(c, subtitle); err != nil {
- log.Error("params(%+v).error(%v)", subtitle, err)
- return
- }
- if err = s.dao.DelSubtitleCache(c, oid, subtitleID); err != nil {
- log.Error("DelSubtitleCache.params(oid:%v,subtitleID:%v).error(%v)", oid, subtitleID, err)
- return
- }
- if err = s.dao.DelVideoSubtitleCache(c, oid, tp); err != nil {
- log.Error("DelVideoSubtitleCache.params(oid:%v,tp:%v).error(%v)", oid, tp, err)
- return
- }
- return
- }
- // ArchiveName .
- func (s *Service) ArchiveName(c context.Context, aid int64) (arcvhiveName string, err error) {
- var (
- res *api.Arc
- )
- if res, err = s.arcRPC.Archive3(c, &archive.ArgAid2{
- Aid: aid,
- }); err != nil {
- log.Error("params(aid:%v).error(%v)", aid, err)
- return
- }
- arcvhiveName = res.Title
- return
- }
- // SubtitleShow .
- func (s *Service) SubtitleShow(c context.Context, oid int64, subtitleID int64, mid int64) (subtitleShow *model.SubtitleShow, err error) {
- var (
- subtitle *model.Subtitle
- canShow bool
- res *api.Arc
- infoReply *account.InfoReply
- showStatus model.SubtitleStatus
- )
- if subtitle, err = s.getSubtitle(c, oid, subtitleID); err != nil {
- log.Error("params(oid:%v,subtitleID:%v).error(%v)", oid, subtitleID, err)
- return
- }
- if subtitle == nil {
- err = ecode.NothingFound
- return
- }
- showStatus = subtitle.Status
- // 发布的状态都可见
- // 非发布的状态本人可见
- // 审核状态 up 主可见
- switch subtitle.Status {
- case model.SubtitleStatusPublish:
- canShow = true
- case model.SubtitleStatusToAudit,
- model.SubtitleStatusCheckPublish:
- if subtitle.UpMid == mid || subtitle.Mid == mid {
- canShow = true
- }
- case model.SubtitleStatusDraft,
- model.SubtitleStatusAuditBack,
- model.SubtitleStatusCheckToAudit:
- if subtitle.Mid == mid {
- canShow = true
- }
- case model.SubtitleStatusManagerBack:
- if subtitle.Mid == mid {
- canShow = true
- }
- showStatus = model.SubtitleStatusAuditBack
- default:
- err = ecode.SubtitlePermissionDenied
- return
- }
- if !canShow {
- err = ecode.SubtitlePermissionDenied
- return
- }
- lan, lanDoc := s.subtitleLans.GetByID(int64(subtitle.Lan))
- subtitleShow = &model.SubtitleShow{
- ID: subtitle.ID,
- Oid: subtitle.Oid,
- Type: subtitle.Type,
- Aid: subtitle.Aid,
- Lan: lan,
- LanDoc: lanDoc,
- Mid: subtitle.Mid,
- IsSign: subtitle.IsSign,
- IsLock: subtitle.IsLock,
- Status: showStatus,
- SubtitleURL: subtitle.SubtitleURL,
- RejectComment: subtitle.RejectComment,
- }
- if subtitle.UpMid == mid {
- subtitleShow.UpperStatus = model.UpperStatusUpper
- }
- if subtitle.Mid == mid {
- subtitleShow.AuthorStatus = model.AuthorStatusAuthor
- }
- if res, err = s.arcRPC.Archive3(c, &archive.ArgAid2{
- Aid: subtitle.Aid,
- }); err != nil {
- log.Error("params(aid:%v).error(%v)", subtitle.Aid, err)
- err = nil
- } else {
- subtitleShow.ArchiveName = res.Title
- }
- if infoReply, err = s.accountRPC.Info3(c, &account.MidReq{
- Mid: subtitle.AuthorID,
- }); err != nil {
- log.Error("params(mid:%v).error(%v)", subtitle.Mid, err)
- err = nil
- } else {
- subtitleShow.Author = infoReply.GetInfo().GetName()
- }
- return
- }
|