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.
129 lines
2.9 KiB
129 lines
2.9 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"go-common/app/interface/main/dm2/model" |
|
"go-common/library/log" |
|
) |
|
|
|
// getSubtitlDraft get a subtitle |
|
// cache throught |
|
func (s *Service) getSubtitlDraft(c context.Context, oid int64, tp int32, mid int64, lanCode uint8) (draft *model.Subtitle, err error) { |
|
var ( |
|
cacheErr bool |
|
) |
|
if draft, err = s.dao.SubtitleDraftCache(c, oid, tp, mid, lanCode); err != nil { |
|
cacheErr = true |
|
err = nil |
|
} |
|
if draft != nil { |
|
if draft.ID <= 0 { |
|
draft = nil |
|
err = nil |
|
} |
|
return |
|
} |
|
if draft, err = s.dao.GetSubtitleDraft(c, oid, tp, mid, lanCode); err != nil { |
|
log.Error("params(oid:%v,tp:%v,mid:%v,lanCode:%v).error(%v)", oid, tp, mid, lanCode, err) |
|
return |
|
} |
|
if draft == nil { |
|
draft = &model.Subtitle{ |
|
Oid: oid, |
|
Type: tp, |
|
Mid: mid, |
|
Lan: lanCode, |
|
} |
|
} |
|
if !cacheErr { |
|
temp := draft |
|
s.cache.Do(c, func(ctx context.Context) { |
|
s.dao.SetSubtitleDraftCache(ctx, temp) |
|
}) |
|
} |
|
if draft.ID <= 0 { |
|
draft = nil |
|
err = nil |
|
} |
|
return |
|
} |
|
|
|
// GetSubtitle get a subtitle |
|
func (s *Service) getSubtitle(c context.Context, oid int64, subtitleID int64) (subtitle *model.Subtitle, err error) { |
|
var ( |
|
cacheErr bool |
|
) |
|
if subtitle, err = s.dao.SubtitleCache(c, oid, subtitleID); err != nil { |
|
cacheErr = true |
|
err = nil |
|
} |
|
if subtitle != nil { |
|
if subtitle.Empty { |
|
subtitle = nil |
|
err = nil |
|
} |
|
return |
|
} |
|
if subtitle, err = s.dao.GetSubtitle(c, oid, subtitleID); err != nil { |
|
log.Error("params(oid:%v, subtitleID:%v).error(%v)", oid, subtitleID, err) |
|
return |
|
} |
|
if subtitle == nil { |
|
subtitle = &model.Subtitle{ |
|
Oid: oid, |
|
ID: subtitleID, |
|
Empty: true, |
|
} |
|
} |
|
if !cacheErr { |
|
temp := subtitle |
|
s.cache.Do(c, func(ctx context.Context) { |
|
s.dao.SetSubtitleCache(ctx, temp) |
|
}) |
|
} |
|
if subtitle.Empty { |
|
subtitle = nil |
|
err = nil |
|
} |
|
return |
|
} |
|
|
|
// getSubtitles 不保证顺序 |
|
func (s *Service) getSubtitles(c context.Context, oid int64, subtitleIds []int64) (subtitles map[int64]*model.Subtitle, err error) { |
|
var ( |
|
hits map[int64]*model.Subtitle |
|
missed []int64 |
|
cacheErr bool |
|
missedSubtitles []*model.Subtitle |
|
) |
|
if hits, missed, err = s.dao.SubtitlesCache(c, oid, subtitleIds); err != nil { |
|
cacheErr = true |
|
err = nil |
|
} |
|
subtitles = make(map[int64]*model.Subtitle) |
|
for _, subtitle := range hits { |
|
if subtitle.Empty { |
|
missed = append(missed, subtitle.ID) |
|
continue |
|
} |
|
subtitles[subtitle.ID] = subtitle |
|
} |
|
if len(missed) > 0 { |
|
if missedSubtitles, err = s.dao.GetSubtitles(c, oid, missed); err != nil { |
|
log.Error("getSubtitles(oid:%v,subtitleIds:%v),error(%v)", oid, subtitleIds, err) |
|
return |
|
} |
|
} |
|
for _, subtitle := range missedSubtitles { |
|
subtitles[subtitle.ID] = subtitle |
|
} |
|
if !cacheErr { |
|
for _, subtitle := range missedSubtitles { |
|
temp := subtitle |
|
s.cache.Do(c, func(ctx context.Context) { |
|
s.dao.SetSubtitleCache(ctx, temp) |
|
}) |
|
} |
|
} |
|
return |
|
}
|
|
|