首次提交
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/inchstep/server/internal/middleware"
|
||||
"github.com/inchstep/server/internal/models"
|
||||
"github.com/inchstep/server/internal/services"
|
||||
)
|
||||
|
||||
type SocialHandler struct {
|
||||
socialSvc *services.SocialService
|
||||
}
|
||||
|
||||
func NewSocialHandler(svc *services.SocialService) *SocialHandler {
|
||||
return &SocialHandler{socialSvc: svc}
|
||||
}
|
||||
|
||||
// ---------- 好友 ----------
|
||||
|
||||
type friendReq struct {
|
||||
FriendID string `json:"friendId" binding:"required"`
|
||||
}
|
||||
|
||||
func (h *SocialHandler) SendFriendRequest(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
var req friendReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, "参数格式错误")
|
||||
return
|
||||
}
|
||||
if err := h.socialSvc.SendFriendRequest(userID, req.FriendID); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) AcceptFriendRequest(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
var req friendReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, "参数格式错误")
|
||||
return
|
||||
}
|
||||
if err := h.socialSvc.AcceptFriendRequest(userID, req.FriendID); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) RemoveFriend(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
friendID := c.Param("userId")
|
||||
if err := h.socialSvc.RemoveFriend(userID, friendID); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) ListFriends(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
friends, err := h.socialSvc.GetFriends(userID)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, friends)
|
||||
}
|
||||
|
||||
// ---------- 动态 ----------
|
||||
|
||||
type createPostReq struct {
|
||||
Content *string `json:"content,omitempty"`
|
||||
Images *string `json:"images,omitempty"`
|
||||
Privacy int `json:"privacy"`
|
||||
}
|
||||
|
||||
func (h *SocialHandler) CreatePost(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
var req createPostReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, "参数格式错误")
|
||||
return
|
||||
}
|
||||
post := &models.Post{
|
||||
UserID: userID,
|
||||
Content: req.Content,
|
||||
Images: req.Images,
|
||||
Privacy: req.Privacy,
|
||||
}
|
||||
if err := h.socialSvc.CreatePost(post); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, post)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) GetFeed(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "20"))
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize < 1 || pageSize > 100 {
|
||||
pageSize = 20
|
||||
}
|
||||
posts, total, err := h.socialSvc.GetFeed(page, pageSize)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, gin.H{
|
||||
"list": posts,
|
||||
"total": total,
|
||||
"page": page,
|
||||
})
|
||||
}
|
||||
|
||||
func (h *SocialHandler) LikePost(c *gin.Context) {
|
||||
postID := c.Param("id")
|
||||
if err := h.socialSvc.LikePost(postID); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) CommentPost(c *gin.Context) {
|
||||
postID := c.Param("id")
|
||||
if err := h.socialSvc.CommentPost(postID); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
// ---------- 小组 ----------
|
||||
|
||||
func (h *SocialHandler) CreateGroup(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
var group models.Group
|
||||
if err := c.ShouldBindJSON(&group); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, "参数格式错误")
|
||||
return
|
||||
}
|
||||
if err := h.socialSvc.CreateGroup(userID, &group); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, group)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) JoinGroup(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
groupID := c.Param("id")
|
||||
if err := h.socialSvc.JoinGroup(groupID, userID); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) LeaveGroup(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
groupID := c.Param("id")
|
||||
if err := h.socialSvc.LeaveGroup(groupID, userID); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
|
||||
func (h *SocialHandler) GetGroupMembers(c *gin.Context) {
|
||||
groupID := c.Param("id")
|
||||
members, err := h.socialSvc.GetGroupMembers(groupID)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, members)
|
||||
}
|
||||
|
||||
// ---------- 成就 ----------
|
||||
|
||||
type AchievementHandler struct {
|
||||
pointsSvc *services.PointsService
|
||||
}
|
||||
|
||||
func NewAchievementHandler(ps *services.PointsService) *AchievementHandler {
|
||||
return &AchievementHandler{pointsSvc: ps}
|
||||
}
|
||||
|
||||
func (h *AchievementHandler) ListAll(c *gin.Context) {
|
||||
list, err := h.pointsSvc.GetAllAchievements()
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, list)
|
||||
}
|
||||
|
||||
func (h *AchievementHandler) ListUserAchievements(c *gin.Context) {
|
||||
userID := middleware.GetUserID(c)
|
||||
list, err := h.pointsSvc.GetUserAchievements(userID)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, list)
|
||||
}
|
||||
Reference in New Issue
Block a user