帖子点赞接口的实现
帖子点赞接口实现
在实现帖子点赞的功能时,我们要记录哪些用户已经对某个帖子点过赞,以避免用户对同一个帖子多次点赞。对于这样的需求,我们可以使用Redis的集合(Set)数据结构。
数据模型规划
对于每个帖子的点赞,我们可以建立一个集合来储存已经点过赞的用户ID:
likes:<postId>
:一个包含已经对帖子<postId>
点过赞的所有用户的 ID 的集合
代码实现
创建帖子点赞接口的代码如下:
type Like struct { UserId string `json:"userId" binding:"required"` PostId string `json:"postId" binding:"required"` } r.POST("/like", func(c *gin.Context) { var like Like if err := c.ShouldBindJSON(&like); err != nil{ c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } userId := like.UserId postId := like.PostId isMember := client.SIsMember("likes:"+postId, userId).Val() if isMember { c.JSON(http.StatusBadRequest, gin.H{"message": "Already liked"}) return } err := client.SAdd("likes:"+postId, userId).Err() // 在此处添加错误处理和返回逻辑。如果没有错误,应该返回一个确认信息的响应体。 c.JSON(http.StatusOK, gin.H{"message": "Post liked"}) })
在该示例中,我们首先会检查该用户是否已经对该帖子点过赞。如果已经点过赞,则返回一个错误。否则,将用户ID添加到对应帖子的 "likes" 集合中。
以上就是如何创建一个处理帖子点赞功能的接口的示例代码。在实际实现时,你应该根据你自己的需求和应用逻辑进行相应的调整。例如处理当帖子不存在,或者用户不存在时的情况等。
基于Go和Redis的社交媒体 文章被收录于专栏
欢迎阅读这个关于如何构建一个基于Go,Gin和Redis的简单社交媒体应用的文章。这个项目旨在展示如何使用这些技术来处理一些典型的社交媒体功能,包括用户注册、发布帖子、点赞和获取用户的帖子。其中Redis部分我们使用了Redis的五种数据结构