这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
项目部分逻辑
登录的实现
与用户的登录注册有关的接口有三个/douyin/user、/douyin/user/register/、/douyin/user/login其中user主要存储用户信息,不必多言。这里主要关注一下登录和注册功能的具体实现。
用户注册
用户注册接口的实现大致逻辑为:
获取用户输入的username和password之后,首先对其进行长度验证(不可超过32位),然后使用Gorm链接数据库,在此期间若遇到错误会有相应的文字错误提示。然后生成useriID,userID是从100000开始,以后每新增一个用户向后递增1,在这里主要是参考了qq账号和B站uid的位数,id仅是账户唯一标识的功能。最后生成token,这里使用了JWT生成token,因为对于单体应用而言,HS256 和 RS256 的安全性没有任何差别。当以上三步都完毕之后,返回信息。
点赞模块
-
判断是否是登录状态
-
下面是查redis的逻辑
-
首先先查看当前用户是否对该视频进行了点赞,通过key查询出来用户的点赞信息,会出现三种情况(0,1,2)
- 0代表没有点赞呢,1代表点赞了,2代表取消了点赞
-
此时判断当前传入的点赞类型和查出的类型
- 如果传入的是1,而查出来的不是1,那么就说明,当前用户对该视频点赞成功
- 如果传入的是2,而查出来的是1,表示已经点赞了,现在取消了赞,如果查出来的是0或者2,那么什么也不做
-
此时应该记录好了用户对某个视频的点赞类型,同时应该也记录上哪个用户给哪个视频点赞了
-
查询点赞列表
- 通过查询Set数据结构,传入用户id就可拿到当前用户所有的点赞视频id
- 然后根据视频id查询出所有的视频
视频点赞总数
通过查询ZSet来查询分数是1的元素数量,也就是统计每个视频的点赞数量