这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
评论操作
需求
登录用户对视频进行评论
-
基本流程
-
- 前端发出评论请求,鉴别登录状态,后端开始业务流程。
- rpc调用CommentService,根据当前user_id & video_id对comment表进行更新(会记录评论的时间),同时rpc调用VideoService,对video表中video_id对应的视频评论数进行更新。
- 若Action_type = 1,则insert Comment表,并且video表中视频评论数+1
- 若Action_type = 2,则insert Comment表,并且video表中视频评论数-1(此处会判别是否表中不存在此评论,不存在则此次操作无效)
- 后端回复前端。
业务流程图
/*
/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
}
视频评论列表
需求
展示视频的全部评论,同样按照时间逆序。
-
基本流程
-
- 前端发出展示视频评论请求,鉴别登录状态,后端开始业务逻辑。
- rpc调用CommentService,根据当前video_id在comment表中进行查询,同时根据每条评论对应的user_id,rpc调用UserService获得评论者的相关信息。
- 将评论相关信息及评论者相关信息进行组装,后端回复前端。
/*
/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
}
```
```