大项目开发之点赞篇(3) | 青训营笔记

113 阅读2分钟

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

互动接口设计

对互动接口的赞操作和喜欢列表部分进行简要说明。

系统设计

image.png

Like 结构体

type Like struct {
   Id  int //自增主键
   Uid int //点赞用户id
   Vid int //视频id
   Act int //是否点赞,1为点赞,0为取消赞
}

// TableName 定义表名
func (Like) TableName() string {
	return "likes"
}

Service 接口

1、IsLike 当前用户 uid 是否点赞了当前视频 vid
IsLike(uid int, vid int) (bool, error)
step1:查询 RdLikeUID 中是否存在 key:strUID - value:strVID,若存在则返回点赞状态;
step2:RdLikeUID 不存在 strUID 或是 strUID 中不存在 strVID,查询 RdLikeVID 是否存在 key:strVID - value:strUID,若存在则返回点赞状态;
step3:RdLikeUID RdLikeVID 中都没有对应 key-value,通过 uid 查询数据库中所有点赞 vid,并维护到 RdLikeUID 中,重新进行 step1。
2、VideoLikeCount 当前视频 vid 被点赞数
VideoLikeCount(vid int) (int, error)
step1:查询 RdLikeVID 中是否存在 key:strVID;
step2:若不存在,通过 vid 查询数据库中所有点赞 uid,并维护到 RdLikeVID 中;
step3:通过 set 集合中 uid 个数,获取当前视频 vid 被点赞数量。
3、LikeListCount 当前用户 uid 点赞视频总数
LikeListCount(uid int) (int, error)
step1:查询 RdLikeUID 中是否存在 key:strUID;
step2:若不存在,通过 uid 查询数据库中所有点赞 vid,并维护到 RdLikeUID 中;
step3:通过 set 集合中 vid 个数,获取用户 uid 点赞视频总数。
4、LikeAction 当前用户 uid 对视频 vid 的点赞操作,1-点赞,2-取消点赞
LikeAction(uid int, vid int, act int) error
点赞
step1:查询 RdLikeUID 中是否存在 key:strUID;
step2:若存在则插入当前视频 value:strVID,并将点赞操作加入 likeAdd 消息队列中;
step3:若不存在,通过 uid 查询数据库中所有点赞 vid,并维护到 RdLikeUID 中,再执行step2;
step4:维护 RdLikeVID(若不存在),在 strVID 中插入当前用户 value:strUID。
likeAdd:查询数据库中用户 uid 与视频 vid 的 act 值,若为 0 则没有点过赞,插入新记录;若为 2 则取消了点赞,更新点赞状态。
取消点赞同点赞步骤,从 Redis 中删除记录并将取消点赞操作加入 likeDel 消息队列中。
likeDel:查询数据库中用户 uid 与视频 vid 的 act 值,若为 1 则点赞,更新取消点赞状态。
5、GetLikeList 当前用户 uid 所有点赞视频
GetLikeList(uid int, curId int) ([]int, error)
step1:维护 RdLikeUID(若不存在)。
step2:获取 set 集合中全部 vid。
step3:根据 vid 构建喜欢列表。