极简抖音中赞操作和评论操作踩坑记录 | 青训营笔记

187 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

  1. 赞操作接口文档中显示请求参数如下 user_id | query | | 是 | 说明:用户id | | ----------- | ----- | - | - | -------------- | | token | query | | 是 | 说明:用户鉴权token | | video_id | query | | 是 | 说明:视频id | | action_type | query | | 是 | 说明:1-点赞,2-取消点赞|

但是在实际开发中发现赞操作请求参数中并没有user_id,因此需要在.api和自动生成的type.go中相应位置注释掉user_id

  1. 评论操作接口文档显示的请求参数如下 参数名 | 位置 | 类型 | 必填 | 说明 | | ------------ | ----- | -- | -- | -------------------------------- | | user_id | query | | 是 | 说明:用户id | | token | query | | 是 | 说明:用户鉴权token | | video_id | query | | 是 | 说明:视频id | | action_type | query | | 是 | 说明:1-发布评论,2-删除评论 | | comment_text | query | | 否 | 说明:用户填写的评论内容,在action_type=1的时候使用 | | comment_id | query | | 否 | 说明:要删除的评论id,在action_type=2的时候使用

同样在实际开发中发现赞操作请求参数中并没有user_id,因此需要在.api和自动生成的type.go中相应位置注释掉user_id

  1. 事务的写法如下
// CommentModel\
// TransCtx 暴露给logic开启事务\
func (m *defaultCommentModel) TransCtx(ctx context.Context, fn func(ctx context.Context, session sqlx.Session) error) error {
   return m.conn.TransactCtx(ctx, func(ctx context.Context, s sqlx.Session) error {
      return fn(ctx, s)
   })
}


// 对应的insert\
func (m *defaultCommentModel) TransInsert(ctx context.Context, session sqlx.Session, data *Comment) (sql.Result, error) {
   query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?)", m.table, commentRowsExpectAutoSet)
   return session.ExecCtx(ctx, query, data.VideoId, data.UserId, data.Comment)

}

//对于的Logic
if err := l.svcCtx.CommentModel.TransCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error {
   _, err := l.svcCtx.CommentModel.TransInsert(ctx, session, comment)
   if err != nil {
      rp.Status_code = 2
      rp.Status_msg = "评论创建失败"
      return err
   }
   video, err := l.svcCtx.VideoModel.FindOne(ctx, req.Video_id)
   if err != nil {
      rp.Status_code = 3
      rp.Status_msg = "评论所属视频被删除"
      return err
   }
   video.CommentCount++
   _, err = l.svcCtx.VideoModel.TransUpdate(ctx, session, video)
   if err != nil {
      rp.Status_code = 4
      rp.Status_msg = "评分数更新失败"
      return err
   }
   rp.Status_code = 0
   rp.Status_msg = "成功"

   return nil
}); err != nil {
   return &rp, err
}

  1. 点赞操作中不仅需要操作用户-视频-点赞表,也要在视频表中修改获赞个数,还要修改FeedLogic中的is_favorite,不然的话就会出现当前用户登出后再次登入后显示不出来点的赞