抖音项目用户模块 | 青训营笔记

264 阅读3分钟

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

需求分析

用户可以对评论进行操作,添加评论或者删除评论,同时能够在对应的视频根据时间倒序看见评论。

/douyin/comment/action/ - 评论操作​

  • 登录用户对视频进行评论。​
  • 接口类型​:POST​

/douyin/comment/list/ - 视频评论列表​

  • 查看视频的所有评论,按发布时间倒序。​
  • 接口类型: GET

接口定义

syntax = "proto3";  
package comment;  
option go_package = "comment";  
  
message BaseResp {  
  int32 status_code = 1;//状态码  
  string status_message = 2;//状态描述  
  int64 service_time = 3;//服务时间  
}  
  
message User {  
  int64 id = 1;//用户id  
  string name = 2;//用户名称  
  int64 follow_count = 3;//关注总数  
  int64 follower_count = 4;//粉丝总数  
  bool is_follow = 5;//true-已关注,false-未关注  
  string avatar = 6; // 用户头像  
  string background_image = 7; // 用户个人页顶部大图  
  string signature = 8; // 个人简介  
  int64 total_favorited = 9; // 获赞数量  
  int64 work_count = 10; // 作品数量  
  int64 favorite_count = 11; // 点赞数量  
}  
  
message Comment {  
  int64 id = 1;//视频评论id  
  User user = 2;//评论用户信息  
  string content = 3;//评论内容  
  string create_date = 4;//评论发布日期,格式mm-dd  
  int64 like_count = 5;// 该评论点赞数量  
  int64 tease_count = 6; // 该评论diss数量  
}  
  
message create_comment_request {  
  string token = 1;//用户鉴权token  
  int64 video_id = 2;//视频id  
  string comment_text = 3;////用户填写的评论内容  
}  
  
message create_comment_response {  
  BaseResp base_resp = 1;  
  Comment comment = 2;//评论成功返回评论内容,不需要重新拉取整个列表  
}  
  
message delete_comment_request {  
  string token = 1;//用户鉴权token  
  int64 video_id = 2;//视频id  
  int64 comment_id = 3;//要删除的评论id  
}  
  
message delete_comment_response {  
  BaseResp base_resp = 1;  
  Comment comment = 2;//评论成功返回评论内容,不需要重新拉取整个列表  
}  
  
  
message comment_list_request {  
  string token = 1;//用户鉴权token  
  int64 video_id = 2;//视频id  
}  
  
message comment_list_response {  
  BaseResp base_resp = 1;  
  repeated Comment comment_list = 2;//评论列表  
}  
  
service CommentService {  
  rpc CreateComment (create_comment_request) returns (create_comment_response) {}  
  rpc DeleteComment (delete_comment_request) returns (delete_comment_response) {}  
  rpc CommentList (comment_list_request) returns (comment_list_response) {}  
}

这里接口定义和官方提供的稍有不同,把评论操作分为添加和删除两个操作了。这样在 api 层区分一下调用更加方便点。

数据表定义

// CommentRaw Comment Gorm Data Structures
type CommentRaw struct {  
   gorm.Model  
   UserId  int64  `gorm:"column:user_id;not null;index:idx_userid"`  
   VideoId int64  `gorm:"column:video_id;not null;index:idx_videoid"`  
   Content string `gorm:"column:content;type:varchar(255);not null"`  
}

评论表包含一个用户 ID、一个视频 ID 以及评论的内容。这样的话添加和删除评论只需要根据 userId 以及 videoId 就很容易查找到。

微服务流程

评论操作

  • api 层首先对获得的请求进行解析,得到基本的 token、vedioId 以及 action_type,对其中的参数进行校验;
  • 接着根据 action_type 判断是添加评论还是删除评论,然后调用相应的 service 层进行处理;
  • service 层接收到请求后,首先 token 用 JWT 进行认证,然后调用 dal 层添加或删除评论;
  • 最后根据 dal 层得到的信息返回给 service 层,在返回给 api 层。

评论列表

评论列表和上述流程差不多,不太一样的是需要在 dal 层得到用户信息,也就是返回的信息要多一点。