中秋佳节,闲来无事,写了一个文章点赞服务,在此记录一下
场景
在阅读文章时,觉得好的文章都会点赞,表示对作者的鼓励支持,也可能最后取消点赞,有时会反复操作。
用户可能在个人中心查看自己的点赞列表,或他人对自己文章的点赞情况。所以在设计时可以添加一些重复的信息例如:头像、文章标题。
设计
数据结构设计:
- 点赞结构
type Like struct {
ID string `json:"id" valid:"required,uuid" jsonapi:"primary,likes"`
// 用户ID
UserID string `json:"userID" valid:"required,uuid" jsonapi:"attr,userID"`
// 文章id
SourceID string `json:"sourceID" valid:"required,uuid" jsonapi:"attr,sourceID"`
// 其他数据,比如:头像、文章标题等(以字符串方式传入)
Data string `json:"data" jsonapi:"attr,data"`
Deleted bool `json:"deleted" jsonapi:"attr,deleted"`
CreatedTime int64 `json:"createdTime" jsonapi:"attr,createdTime"`
}
Data字段传入其他额外信息,客户端自己解析出来即可,这样该服务就可以在其他地方使用时,不需要在添加新的字段。
-
点赞总数结构
type LikeCount struct { ID string `json:"id" valid:"required,uuid" jsonapi:"primary,likesCount"` Count int `json:"count" jsonapi:"attr,count"` // 可以是文章ID、也可以是用户ID SourceID string `json:"sourceID" valid:"required,uuid" jsonapi:"attr,sourceID"` Deleted bool `json:"deleted" jsonapi:"attr,deleted"` CreatedTime int64 `json:"createdTime" jsonapi:"attr,createdTime"` }
关于SourceID的说明,可以是文章ID、也可以是用户ID,这样可以直接获取文章的点赞总数,也可以获取用户获得的点赞总数。
接口设计
提供以下接口:
- 点赞:没有点赞则点赞,已点赞则取消
- 文章点赞总数获取
- 根据文章获取点赞列表
- 判断用户是否对文章点赞
- 用户获得的点赞总数
效率
点赞是一个高频操作,可以使用redis来进行缓存,来降低对数据库的影响,提高xiaolv。该服务只是在自己的系统上使用,所以没有添加redis模块。
总结
以上开发使用的是golang + pgsql。欢迎交流学习
在我的个人网站中有使用,点击“顶一下”按钮,演示地址