go-common/app/interface/main/creative/service/reply/reply.go
2019-04-22 18:49:16 +08:00

175 lines
4.5 KiB
Go

package reply
import (
"context"
"go-common/app/interface/main/creative/model/music"
"go-common/app/interface/main/creative/model/reply"
seamdl "go-common/app/interface/main/creative/model/search"
"go-common/app/interface/openplatform/article/model"
account "go-common/app/service/main/account/model"
"go-common/app/service/main/archive/api"
"go-common/library/log"
"go-common/library/net/metadata"
"go-common/library/sync/errgroup"
)
// Replies get reply list.
func (s *Service) Replies(c context.Context, p *seamdl.ReplyParam) (res *seamdl.Replies, err error) {
if res, err = s.sear.ReplyES(c, p); err != nil {
return
}
if res == nil {
return
}
var (
g, ctx = errgroup.WithContext(c)
mids = res.Repliers
oids = res.Oids
tyOids = res.TyOids
replies map[int64]*reply.Reply
elecRelation map[int64]int
followers map[int64]int
users map[int64]*account.Info
arcs map[int64]*api.Arc
arts map[int64]*model.Meta
auds map[int64]*music.Audio
)
log.Info("s.sear.Replies mid(%d)|type(%d)|mids(%+v)|res(%+v)", p.OMID, p.Type, mids, res)
g.Go(func() error { //获取具体评论信息
if len(res.DeriveIds) > 0 && len(res.DeriveOids) > 0 {
replies, _ = s.reply.ReplyMinfo(ctx, p.Ak, p.Ck, p.OMID, int64(p.Type), res.DeriveIds, res.DeriveOids, p.IP)
}
return nil
})
g.Go(func() error { //获取被充电状态
if len(mids) > 0 {
elecRelation, _ = s.elec.ElecRelation(ctx, p.OMID, mids, p.IP)
}
return nil
})
g.Go(func() error { //获取被关注状态
if len(mids) > 0 {
followers, _ = s.acc.Followers(ctx, p.OMID, mids, p.IP)
}
return nil
})
g.Go(func() error { //获取用户信息
if len(mids) > 0 {
users, _ = s.acc.Infos(ctx, mids, p.IP)
}
return nil
})
g.Go(func() error { //获取各种查询对象信息
switch p.Type {
case seamdl.All: //查询所有
if v, ok := tyOids[seamdl.Archive]; ok { //稿件
g.Go(func() error {
arcs, _ = s.arc.Archives(ctx, v, p.IP)
return nil
})
}
if v, ok := tyOids[seamdl.Article]; ok { //文章
g.Go(func() error {
arts, _ = s.art.ArticleMetas(ctx, v, p.IP)
return nil
})
}
if v, ok := tyOids[seamdl.Audio]; ok { //音频
g.Go(func() error {
auds, _ = s.mus.Audio(c, v, 0, p.IP)
return nil
})
}
case seamdl.Archive: //稿件
arcs, _ = s.arc.Archives(ctx, oids, p.IP)
case seamdl.SmallVideo: //小视频
case seamdl.Article: //文章
arts, _ = s.art.ArticleMetas(ctx, oids, p.IP)
case seamdl.Audio: //音频
auds, _ = s.mus.Audio(c, oids, 0, p.IP)
}
return nil
})
g.Wait()
for _, v := range res.Result {
if v == nil {
continue
}
if p, ok := replies[v.Parent]; ok { //设置父级评论信息
v.RootInfo = p
v.ParentInfo = p
}
if elec, ok := elecRelation[v.Mid]; ok { //设置充电状态
v.IsElec = elec
}
if fl, ok := followers[v.Mid]; ok { //设置关注状态
v.Relation = fl
}
if u, ok := users[v.Mid]; ok { //设置图像和用户名
v.Replier = u.Name
v.Uface = u.Face
}
switch v.Type {
case seamdl.Archive: //稿件
if av, ok := arcs[v.Oid]; ok && av != nil {
v.Title = av.Title
v.Cover = av.Pic
}
case seamdl.SmallVideo: //小视频
case seamdl.Article: //文章
if art, ok := arts[v.Oid]; ok && art != nil {
var cover string
if len(art.ImageURLs) > 0 {
cover = art.ImageURLs[0]
}
v.Title = art.Title
v.Cover = cover
}
case seamdl.Audio: //音频
if au, ok := auds[v.Oid]; ok && au != nil {
v.Title = au.Title
v.Cover = au.Cover
}
}
}
return
}
// AppIndexReplies get newest reply list.
func (s *Service) AppIndexReplies(c context.Context, ak, ck string, mid, oid int64, isReport, isHidden, tp, resMdlPlat int8, filterStr, kw, order, ip string, pn, ps int64) (res *seamdl.Replies, err error) {
p := &seamdl.ReplyParam{
Ak: ak,
Ck: ck,
OMID: mid,
OID: oid,
IsReport: isReport,
Type: tp,
FilterCtime: filterStr,
Kw: kw,
Order: order,
IP: metadata.String(c, metadata.RemoteIP),
Ps: int(ps),
Pn: int(pn),
ResMdlPlat: resMdlPlat,
}
if res, err = s.Replies(c, p); err != nil {
return
}
if res == nil || len(res.Result) == 0 {
return
}
replies := make([]*seamdl.Reply, 0, len(res.Result))
for _, v := range res.Result {
if v.Type == seamdl.Audio {
continue
}
replies = append(replies, v)
if len(replies) == 2 {
break
}
}
res.Result = replies
return
}