- 新增收藏功能:favorite 服务与 handler、FavoriteButton 组件 - 新增关注功能:follow 服务与 handler、FollowButton 组件 - 用户主页适配关注/粉丝与收藏展示 - flash 消息工具、广告与侧边栏组件微调
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/freefire/jiang13-bbs/middleware"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// ToggleFollow 切换当前登录用户对目标用户的关注状态
|
|
func (h *Handlers) ToggleFollow(c *gin.Context) {
|
|
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "无效的用户 ID"})
|
|
return
|
|
}
|
|
claims := middleware.CurrentUser(c)
|
|
if claims == nil {
|
|
c.JSON(http.StatusUnauthorized, gin.H{"error": "未登录"})
|
|
return
|
|
}
|
|
following, err := h.Follow.Toggle(claims.ID, uint(id))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"following": following})
|
|
}
|
|
|
|
// UserFollowing 获取用户关注的人列表(公开)
|
|
func (h *Handlers) UserFollowing(c *gin.Context) {
|
|
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "无效的用户 ID"})
|
|
return
|
|
}
|
|
if _, err := h.Auth.GetUserByID(uint(id)); err != nil {
|
|
c.JSON(http.StatusNotFound, gin.H{"error": "用户不存在"})
|
|
return
|
|
}
|
|
|
|
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
|
size, _ := strconv.Atoi(c.DefaultQuery("size", "20"))
|
|
|
|
users, total, err := h.Follow.ListFollowing(uint(id), page, size)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"users": nonNilSlice(users),
|
|
"total": total,
|
|
"page": page,
|
|
"size": size,
|
|
})
|
|
}
|