这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
- 赞操作接口文档中显示请求参数如下 user_id | query | | 是 | 说明:用户id | | ----------- | ----- | - | - | -------------- | | token | query | | 是 | 说明:用户鉴权token | | video_id | query | | 是 | 说明:视频id | | action_type | query | | 是 | 说明:1-点赞,2-取消点赞|
但是在实际开发中发现赞操作请求参数中并没有user_id,因此需要在.api和自动生成的type.go中相应位置注释掉user_id
- 评论操作接口文档显示的请求参数如下 参数名 | 位置 | 类型 | 必填 | 说明 | | ------------ | ----- | -- | -- | -------------------------------- | | 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
- 事务的写法如下
// 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
}
- 点赞操作中不仅需要操作用户-视频-点赞表,也要在视频表中修改获赞个数,还要修改FeedLogic中的is_favorite,不然的话就会出现当前用户登出后再次登入后显示不出来点的赞