123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- package newbie
- import (
- "context"
- "go-common/app/interface/main/growup/conf"
- "go-common/app/interface/main/growup/dao/newbiedao"
- "go-common/app/interface/main/growup/model"
- accApi "go-common/app/service/main/account/api"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/sync/errgroup.v2"
- "strconv"
- "time"
- )
- // Letter newbie letter
- func (s *Service) Letter(c context.Context, req *model.NewbieLetterReq) (*model.NewbieLetterRes, error) {
- var (
- group *errgroup.Group
- recUps = make(map[int64]*model.RecommendUp)
- NewbieConf = conf.Conf.Newbie
- category *model.Category
- recUpMidList []int64
- activities []*model.Activity
- archive *model.VideoUpArchive
- accInfo *accApi.InfoReply
- i = 0
- ok bool
- err error
- )
- res := new(model.NewbieLetterRes)
- log.Info("req: %+v", req)
- group = errgroup.WithCancel(c)
- // get up info
- group.Go(func(ctx context.Context) error {
- accInfo, err = s.dao.GetInfo(ctx, req.Mid)
- return err
- })
- // get activities
- group.Go(func(ctx context.Context) error {
- activities, err = s.dao.GetActivities(ctx)
- return err
- })
- // get video up, and set talent
- group.Go(func(ctx context.Context) error {
- archive, err = s.dao.GetVideoUp(ctx, req.Aid)
- return err
- })
- err = group.Wait()
- if err != nil {
- return nil, err
- }
- // data validation, deal with default data
- if req.Mid != archive.Mid {
- log.Error("The archive is not yours, mid: %d, archive.Mid: %v", req.Mid, archive.Mid)
- return nil, ecode.GrowupArchiveNotYours
- }
- if category, ok = newbiedao.Categories[archive.Tid]; !ok {
- log.Error("not found the sub tid, sub tid: %d, Categories: %v", archive.Tid, newbiedao.Categories)
- return nil, ecode.GrowupSubTidNotExist
- }
- if _, ok = newbiedao.Categories[category.Pid]; !ok {
- log.Error("not found the tid, tid: %d, Categories: %v", archive.Tid, newbiedao.Categories)
- return nil, ecode.GrowupTidNotExist
- }
- res.Area = newbiedao.Categories[category.Pid].Name
- log.Info("sub tid: %d, tid: %d", archive.Tid, category.Pid)
- sTid := strconv.FormatInt(archive.Tid, 10)
- if res.Talent, ok = NewbieConf.Talents[sTid]; !ok {
- res.Talent = NewbieConf.DefaultTalent
- }
- for _, activity := range activities {
- if i >= NewbieConf.ActivityCount {
- break
- }
- if activity.Type != NewbieConf.ActivityShotType {
- continue
- }
- if activity.Cover == "" {
- activity.Cover = NewbieConf.DefaultCover
- }
- res.Activities = append(res.Activities, activity)
- i++
- }
- if len(res.Activities) < NewbieConf.ActivityCount {
- log.Error("activity count is not enough %d", NewbieConf.ActivityCount)
- return nil, ecode.GrowupActivityCountNotEnough
- }
- res.UperInfo = new(model.NewbieLetterUpInfo)
- res.UperInfo.Mid = accInfo.Info.Mid
- res.UperInfo.Name = accInfo.Info.Name
- res.Archive = new(model.NewbieLetterArchive)
- res.Archive.Title = archive.Title
- res.Archive.PTime = time.Unix(archive.PTime, 0).Format(model.TimeLayout)
- log.Info("after data validation: data(%+v)", res)
- // get recommend up list
- if _, ok := newbiedao.RecommendUpList[category.Pid]; !ok {
- for _, lists := range newbiedao.RecommendUpList {
- for recUpMid, recUp := range lists {
- recUps[recUpMid] = recUp
- break
- }
- }
- log.Info("Not found recommend up list, system random get them : %+v", recUps)
- } else {
- recUps = newbiedao.RecommendUpList[category.Pid]
- log.Info("found recommend up list : %+v", recUps)
- }
- // get relations
- i = 0
- for recUpMid := range recUps {
- if i >= NewbieConf.RecommendUpPoolCount {
- break
- }
- if recUpMid == req.Mid {
- continue
- }
- recUpMidList = append(recUpMidList, recUpMid)
- i++
- }
- log.Info("recUpMidList: %+v", recUpMidList)
- relations, err := s.dao.GetRelations(c, req.Mid, recUpMidList)
- if err != nil {
- return nil, err
- }
- log.Info("relations: %+v", relations)
- // get ups info
- infosReply, err := s.dao.GetInfos(c, recUpMidList)
- if err != nil {
- err = ecode.GrowupRecommendUpNotExist
- return nil, err
- }
- log.Info("recUpInfos: %+v", infosReply.Infos)
- // select 3 ups
- i = 0
- for recUpMid := range recUps {
- if i >= NewbieConf.RecommendUpCount {
- break
- }
- if _, ok := infosReply.Infos[recUpMid]; !ok {
- continue
- }
- if _, ok := relations[recUpMid]; !ok {
- relations[recUpMid] = &model.Relation{
- Mid: recUpMid,
- Attribute: -1,
- }
- }
- relations[recUpMid].Face = infosReply.Infos[recUpMid].Face
- relations[recUpMid].Name = infosReply.Infos[recUpMid].Name
- res.Relations = append(res.Relations, relations[recUpMid])
- i++
- }
- log.Info("res.Relations: %+v", res.Relations)
- return res, nil
- }
|