功能描述
暂时无法在飞书文档外展示此内容
- (1)用户浏览短视频
- 打开抖音软件,软件判断用户登录状态,已登录用户可使用全部功能,未登录用户只可浏览首页视频。
- (2)用户注册登录
- 在用户界面,用户可查看个人信息。游客注册新账号,并通过已注册账号登录软件,从而解锁软件全部功能。其中用户注册名唯一,不可与已注册用户重名。
- (3)用户互动
- 已登录用户可对发表视频用户的发表视频进行点赞、评论操作。
- (3)用户社交
- 已登录用户可以相互关注并进行聊天。
技术栈
架构设计
采用单体分层架构,即表现层、业务逻辑层、数据访问层。前端发出请求,后端调用相应请求接口,并解析对应的请求数据,调用业务逻辑层接口进行对应的处理,业务逻辑层调用数据访问层与数据库进行交互。
暂时无法在飞书文档外展示此内容
数据库设计
索引设计表
基本都选用了自增主键id做索引
| 表名 | 主键 | 索引 | 说明 |
|---|---|---|---|
t_user | 自增id | name唯一索引 | |
t_follow | (user_id, fans_id) | ||
t_message | 自增id | ||
t_video | 自增id | ||
t_video_comment | 自增id | video_id索引 | 按照视频的查询偏多 |
t_video_favorite | 自增id | video_id索引,liker_id索引 |
基础接口
1)视频流接口 /douyin/feed/
前端发送参数:限制返回视频的最新投稿时间戳、用户 token。后台通过时间戳从视频信息数据表查询视频列表按发布时间倒序返回,并根据视频信息中的发布用户 id 从用户信息数据表查询对应发布用户信息,对视频信息、视频发布用户信息进行拼接后返回给前端。
暂时无法在飞书文档外展示此内容
2)用户注册接口 /douyin/user/register/
边界条件:用户存在(用户名重复),用户名、密码同时或一者为空。
边界检查后数据库创建表项,按照id和用户名生成token回复用户。
考虑到安全性,用户密码利用加盐Bcrypt算法加密存储。
3)用户登录接口 /douyin/user/login/
边界条件:用户不存在,用户密码错误。
边界检查后生成token回复用户。
4)用户信息 /douyin/user/
没有套路的查询操作,为了避免sql注入,对request的user_id做类型检查,判断为int64再继续。
5)视频投稿 /douyin/publish/action/
前端发送参数:视频数据、用户鉴权 token、视频标题。后台通过用户鉴权 token 解析对应登录用户 id,调用服务器上的 ffmpeg 程序对上传视频数据进行截图作为视频封面,利用用户 id 和上传时间对用户上传视频数据、视频封面进行唯一化命名后,将视频信息保存至视频信息数据表。
6)发布列表 /douyin/publish/list/
前端发送参数:用户鉴权 token、用户 id。后台通过用户鉴权 token 解析对应登录用户 id,通过访问用户 id 从视频信息数据表查询发布视频、从用户信息数据表查询对应用户信息,对视频信息、视频发布用户信息进行拼接后返回给前端。
这是我参与「第五届青训营 」笔记创作活动的第17天.