syntax = "proto3"; package api; option go_package = "api.yaml"; import "hz.proto"; // user message DouyinUserRegisterRequest { string username = 1[(api.vd) = "len($) < 32"]; // 注册用户名,最长32个字符 string password = 2[(api.vd) = "len($) < 32"]; // 密码,最长32个字符 } message DouyinUserRegisterResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 int64 user_id = 3; // 用户id string token = 4; // 用户鉴权token } message DouyinUserLoginRequest { string username = 1[(api.vd) = "len($) < 32"]; // 登陆用户名,最长32个字符 string password = 2[(api.vd) = "len($) < 32"]; // 密码,最长32个字符 } message DouyinUserLoginResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 int64 user_id = 3; // 用户id string token = 4; // 用户鉴权token } message DouyinUserRequest { int64 user_id = 1; // 用户id string token = 2; // 用户鉴权token } message DouyinUserResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 User user = 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; // 用户头像Url string background_image = 7; // 用户个人页顶部大图 string signature = 8; // 个人简介 int64 total_favorited = 9; // 获赞数量 int64 work_count = 10; // 作品数量 int64 favorite_count = 11; // 点赞数量 } service UserService{ rpc Register (DouyinUserRegisterRequest) returns (DouyinUserRegisterResponse){ option (api.post) = "/douyin/user/register"; } rpc Login (DouyinUserLoginRequest) returns (DouyinUserLoginResponse){ option (api.post) = "/douyin/user/login"; } rpc GetUserById (DouyinUserRequest) returns (DouyinUserResponse){ option (api.get) = "/douyin/user"; } } // relation message DouyinRelationActionRequest { string token = 1; // 用户鉴权token int64 to_user_id = 2; // 对方用户id int32 action_type = 3; // 1-关注,2-取消关注 } message DouyinRelationActionResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 } message DouyinRelationFollowListRequest { int64 user_id = 1; // 用户id string token = 2; // 用户鉴权token } message DouyinRelationFollowListResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated User user_list = 3; // 用户信息列表 } message DouyinRelationFollowerListRequest { int64 user_id = 1; // 用户id string token = 2; // 用户鉴权token } message DouyinRelationFollowerListResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated User user_list = 3; // 用户列表 } message DouyinRelationFriendListRequest { int64 user_id = 1; // 用户id string token = 2; // 用户鉴权token } message DouyinRelationFriendListResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated FriendUser user_list = 3; // 用户列表 } message FriendUser { User user = 1; // 评论用户信息 string message = 2; // 和该好友的最新聊天消息 int64 msgType = 3; // message消息的类型,0 => 当前请求用户接收的消息, 1 => 当前请求用户发送的消息(用于聊天框显示一条信息) } service RelationService{ rpc RelationAction(DouyinRelationActionRequest) returns (DouyinRelationActionResponse){ option (api.post) = "/douyin/relation/action"; } //关注或取消关注 rpc RelationFollowList(DouyinRelationFollowListRequest) returns (DouyinRelationFollowListResponse){ option (api.get) = "/douyin/relation/follow/list"; } //获取已关注用户的列表 rpc RelationFollowerList(DouyinRelationFollowerListRequest) returns (DouyinRelationFollowerListResponse){ option (api.get) = "/douyin/relation/follower/list"; } //获取粉丝用户列表 rpc RelationFriendList(DouyinRelationFriendListRequest) returns (DouyinRelationFriendListResponse){ option (api.get) = "/douyin/relation/friend/list"; } //获取好友列表 } // feed message DouyinFeedRequest { int64 latest_time = 1; // 可选参数,限制返回视频的最新投稿时间戳,精确到秒,不填表示当前时间 string token = 2; // 可选参数,登录用户设置 } // 例如当前请求的latest_time为9:00,那么返回的视频列表时间戳为[8:55,7:40, 6:30, 6:00] // 所有这些视频中,最早发布的是 6:00的视频,那么6:00作为下一次请求时的latest_time // 那么下次请求返回的视频时间戳就会小于6:00 message DouyinFeedResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated Video video_list = 3; // 视频列表 int64 next_time = 4; // 本次返回的视频中,发布最早的时间,作为下次请求时的latest_time } message Video { int64 id = 1; // 视频唯一标识 User author = 2; // 视频作者信息 string play_url = 3; // 视频播放地址 string cover_url = 4; // 视频封面地址 int64 favorite_count = 5; // 视频的点赞总数 int64 comment_count = 6; // 视频的评论总数 bool is_favorite = 7; // true-已点赞,false-未点赞 string title = 8; // 视频标题 } service FeedService{ rpc GetUserFeed (DouyinFeedRequest) returns (DouyinFeedResponse){ option (api.get) = "/douyin/feed"; } //返回一个视频列表 } // publish message DouyinPublishActionRequest { string token = 1; // 用户鉴权token bytes data = 2; // 视频数据 string title = 3; // 视频标题 } message DouyinPublishActionResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 } message DouyinPublishListRequest { int64 user_id = 1; // 用户id string token = 2; // 用户鉴权token } message DouyinPublishListResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated Video video_list = 3; // 用户发布的视频列表 } service PublishService{ rpc PublishAction(DouyinPublishActionRequest) returns (DouyinPublishActionResponse){ option (api.post) = "/douyin/publish/action"; } //发布视频操作 rpc PublishList(DouyinPublishListRequest) returns (DouyinPublishListResponse){ option (api.get) = "/douyin/publish/list"; } // 获取用户已发布视频的列表 } // message message DouyinMessageChatRequest { string token = 1; // 用户鉴权token int64 to_user_id = 2; // 对方用户id int64 pre_msg_time = 3; // 上次最新消息的时间 } message DouyinMessageChatResponse { int32 status_code = 1; // 状态码,0-成功,其他-失败 string status_msg = 2; // 返回状态描述 repeated Message message_list = 3; // 消息列表 } message Message { int64 id = 1; // 消息id int64 to_user_id = 2; // 该消息接收者的id int64 from_user_id =3; // 该消息发送者的id string content = 4; // 消息内容 string create_time = 5; // 消息创建时间 } message DouyinMessageActionRequest { string token = 1; // 用户鉴权token int64 to_user_id = 2; // 对方用户id int32 action_type = 3; // 1-发送消息 string content = 4; // 消息内容 } message DouyinMessageActionResponse { int32 status_code = 1; // 状态码,0-成功,其他-失败 string status_msg = 2; // 返回状态描述 } service MessageService { rpc MessageChat(DouyinMessageChatRequest) returns (DouyinMessageChatResponse){ option (api.get) = "/douyin/message/chat"; } // 聊天记录 rpc MessageAction(DouyinMessageActionRequest) returns (DouyinMessageActionResponse){ option (api.post) = "/douyin/message/action"; } // 消息操作 } // favorite message DouyinFavoriteActionRequest { string token = 1; // 用户鉴权token int64 video_id = 2; // 视频id int32 action_type = 3; // 1-点赞,2-取消点赞 } message DouyinFavoriteActionResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 } message DouyinFavoriteListRequest { int64 user_id = 1; // 用户id string token = 2; // 用户鉴权token } message DouyinFavoriteListResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated Video video_list = 3; // 用户点赞视频列表 } service FavoriteService{ rpc FavoriteAction(DouyinFavoriteActionRequest) returns (DouyinFavoriteActionResponse){ option (api.post) = "/douyin/favorite/action"; } //点赞或取消点赞 rpc FavoriteList(DouyinFavoriteListRequest) returns (DouyinFavoriteListResponse){ option (api.get) = "/douyin/favorite/list"; } // 返回点赞视频列表 } // comment message DouyinCommentActionRequest { string token = 1; // 用户鉴权token int64 video_id = 2; // 视频id int32 action_type = 3; // 1-发布评论,2-删除评论 string comment_text = 4; // 用户填写的评论内容,在action_type=1的时候使用 int64 comment_id = 5; // 要删除的评论id,在action_type=2的时候使用 } message DouyinCommentActionResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 Comment comment = 3; // 评论成功返回评论内容,不需要重新拉取整个列表 } message DouyinCommentListRequest { string token = 1; // 用户鉴权token int64 video_id = 2; // 视频id } message DouyinCommentListResponse { int32 status_code = 1; // 状态码,0-成功,其他值-失败 string status_msg = 2; // 返回状态描述 repeated Comment comment_list = 3; // 评论列表 } 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数 } service CommentService{ rpc CommentAction(DouyinCommentActionRequest) returns (DouyinCommentActionResponse){ option (api.post) = "/douyin/comment/action"; } //评论操作 rpc CommentList(DouyinCommentListRequest) returns (DouyinCommentListResponse){ option (api.get) = "/douyin/comment/list"; } //返回评论列表 }