抖音大项目互动模块介绍| 青训营笔记

144 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

评论操作
需求

登录用户对视频进行评论

  • 基本流程
    1. 前端发出评论请求,鉴别登录状态,后端开始业务流程。
    2. rpc调用CommentService,根据当前user_id & video_id对comment表进行更新(会记录评论的时间),同时rpc调用VideoService,对video表中video_id对应的视频评论数进行更新。
    3. 若Action_type = 1,则insert Comment表,并且video表中视频评论数+1
    4. 若Action_type = 2,则insert Comment表,并且video表中视频评论数-1(此处会判别是否表中不存在此评论,不存在则此次操作无效)
    5. 后端回复前端。
业务流程图

image.png


/*
    /cmd/comment/service/comment_action.go
*/

type CommentActionService struct {
   ctx context.Context
}

func NewCommentActionService(ctx context.Context) *CommentActionService {
   return &CommentActionService{ctx: ctx}
}

func (c *CommentActionService) CommentAction(req *douyincomment.DouyinCommentActionRequest, uid int64) (*douyincomment.Comment, error) {
   
   /*
       1.将评论进行保存(user、video、comment_time、comment_test)
       2.rpc调用VideoService,更新对应Video的Comment_count
   */
   
   //保存评论
   resp, err := db.UpdateComment(c.ctx, req, uid)
   if err != nil {
      log.Print(err)
      return nil, err
   }
   
   //更新评论数
   err = rpc.CommentCountUpdate(context.Background(), &douyinvideo.DouyinCommentCountRequest{
      VideoId:    req.VideoId,
      ActionType: int64(req.ActionType),
   })
   if err != nil {
      return nil, err
   }

   cmt, err := pack.CommentDbToDouyinComment(resp)
   if err != nil {
      return nil, err
   }

   return cmt, nil
}
视频评论列表
需求

展示视频的全部评论,同样按照时间逆序。

  • 基本流程
    1. 前端发出展示视频评论请求,鉴别登录状态,后端开始业务逻辑。
    2. rpc调用CommentService,根据当前video_id在comment表中进行查询,同时根据每条评论对应的user_id,rpc调用UserService获得评论者的相关信息。
    3. 将评论相关信息及评论者相关信息进行组装,后端回复前端。

image.png

/*
    /cmd/comment/service/comment_list.go
*/
type CommentListService struct {
   ctx context.Context
}

func NewCommentListService(ctx context.Context) *CommentListService {
   return &CommentListService{ctx: ctx}
}

func (c *CommentListService) CommentList(req *douyincomment.DouyinCommentListRequest) ([]*douyincomment.Comment, error) {
   
   /*
       1.根据video_id查询相关评论信息
       2.rpc调用UserService获取评论者相关信息
   */
   
   //查询视频评论
   resp, err := db.QueryCommentList(c.ctx, req)
   if err != nil {
      return nil, err
   }

   temp := *resp
   var cmtList []*douyincomment.Comment
   for _, v := range temp {
      cmt, err := pack.CommentDbToDouyinComment(&v)
      if err != nil {
         return nil, err
      }
      cmtList = append(cmtList, cmt)
   }

   return cmtList, nil
}
```
```