抖音极简版详细文档 :包含演示视频、功能展示
- web框架:Gin
- jwt认证授权:gin-jwt
- 数据库:MySQL(ORM框架:Gorm)
- 云存储:OSS存储
- 登录注册+用户信息、jwt鉴权、全局异常捕捉:茅津菁、谭嘉睿
- 视频流、视频投稿、发布列表:肖文卓、章梓豪
- 点赞、点赞列表、评论、评论列表:袁杰、汪列伟
- 关注、粉丝:李登龙、徐晓明
本项目采取Controller + Service + DAO 三层架构模式:
- config:项目配置(基于viper读取yaml文件)
- constants:项目中使用到的字符串常量
- controller:处理接口逻辑
- dal:数据库DAO层使用gorm进行增删改查操作
- errno:全局封装异常处理类,便于统一处理
- handlers:接口中传参DTO对象
- middlewares:用户认证中间件和全局异常处理中间件
- router:HTTP路由配置
- service:根据DAO层提供的操作封装成对应的服务接口
- utils:项目工具类,包括jwt工具类、云存储oss工具类、Bcrypt加密工具类
表关系设计
表字段设计
用户表:user
关注表:follow
视频表:video
点赞表:favor
评论表:comment
- 说明:使用gin-jwt来配置midlleware插件,自定义其中的身份认证,认证失败相应、登录成功响应内容,根据接口文档在formdata中进行token认证要求去改写增强原有gin-jwt源码,支持formdata方式认证。
- 使用位置:登录接口使用该插件的LoginHandler;其他路由若是需要进行token认证,则可以再对应路由添加插件的MiddlewareFunc来达到认证的效果。
- 说明:统一来接收service层抛出的异常来通过recover()函数来进行捕捉。
- 使用位置:router初始化后安装该异常插件即可。
- 业务思路:①取出token中的userID。 ②获取lastTime的值。 ③查询视频流列表,返回按投稿时间倒序的视频列表。④遍历循环,为视频流列表的每条视频填充点赞等内容。 ⑤封装响应格式。
- 业务思路: ①取出请求中的username和password参数 ②检查用户名和密码是否过长或为空 ③检查用户名是否已经注册 ④若用户名未注册,创建新用户 ⑤用全局中间件gin-jwt获取token,封装响应格式。
- 实现方式:使用的是gin-jwt中提供的loginHandler,对应我只需要实现gin-jwt中的Authenticator身份认证以及PayloadFunc对应要携带的载荷函数以及成功响应、失败响应自定义函数即可。
- 业务思路:①检测用户是否存在。②密码是否正确。③以上都通过后来设置token中需要携带的载荷信息来使用jwt生成token返回。
- 业务思路:①根据指定用户id来获取目标用户信息。②取出token中的userID以及目标用户id去查询关注表是否关注。③将目标用户信息以及是否关注组合成对应的response对象进行返回。【若是中间出现异常直接抛出由异常捕捉插件统一进行异常响应】
- 业务思路:①使用阿里云OSS进行视频存储 编写相应工具类封装返回Bucket以及上传文件接口。②解析token获取userID 视频标题 以及视频文件。 ③调用工具类上传OSS,返回视频url以及通过视频截帧返回视频封面url,存入数据库。 ④封装响应格式。
- 业务思路:①获取userID。②查询该作者的投稿视频。 ③遍历循环,为视频流列表的每条视频填充内容。 ④封装响应格式。
- 业务思路:①根据token解析userID②校验传参videoID、actionType是否合法。③判断是点赞还是取消点赞操作④若是点赞操作,首先检查是否已点赞过,若已点赞过直接返回,否则进行点赞操作。若是取消点赞操作则将点赞记录设置为逻辑删除。
- 业务思路:①校验传参userID是否合法②根据点赞记录查询对应视频,封装成数组对象③封装响应格式。
- 业务思路:①根据token解析userID②校验传参videoID、actionType是否合法。③判断是评论还是删除评论操作④进行评论和删除评论操作。
- 业务思路:①校验传参videoID是否合法②根据点赞记录查询对应视频,封装成数组对象③封装响应格式。
- 业务思路:通过在中间表中增加记录实现,每一条记录对应两个用户ID(分别是被关注者ID和粉丝ID)
- 业务思路:通过用户ID寻找对应粉丝ID的所有关注者ID,再通过关注者ID循环查询用户ID信息
- 优化逻辑:每个ID并发查询用户信息
- 业务思路:通过用户ID寻找对应关注者ID下的所有粉丝ID,再通过粉丝ID循环查询用户ID信息