161 lines
4.1 KiB
Go
161 lines
4.1 KiB
Go
package post
|
||
|
||
import (
|
||
"fmt"
|
||
"mini_server/internal/dao"
|
||
"mini_server/internal/server/help"
|
||
"mini_server/internal/server/httpreply"
|
||
"net/http"
|
||
"time"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/sirupsen/logrus"
|
||
)
|
||
|
||
// 帖子评论处理逻辑
|
||
|
||
type UploadCommentRequest struct {
|
||
Content string `json:"content" bingding:"min=1"`
|
||
}
|
||
|
||
// 发布帖子
|
||
func UploadComment(c *gin.Context) {
|
||
reply := httpreply.NewDefaultReplyData()
|
||
defer httpreply.Reply(c, reply)
|
||
|
||
userId, ok := help.GetUserId(c)
|
||
if !ok {
|
||
reply.Status = http.StatusNotFound
|
||
reply.Message = "无法获取用户信息"
|
||
return
|
||
}
|
||
|
||
var param QueryURI
|
||
if err := c.ShouldBindUri(¶m); err != nil {
|
||
reply.Status = http.StatusBadRequest
|
||
reply.Message = fmt.Sprintf("invalid uri path,err:%v", err)
|
||
return
|
||
}
|
||
|
||
var request UploadCommentRequest
|
||
if err := c.ShouldBindJSON(&request); err != nil {
|
||
reply.Status = http.StatusBadRequest
|
||
reply.Message = fmt.Sprintf("bad request, err:%v", err)
|
||
return
|
||
}
|
||
|
||
data := dao.PostComment{
|
||
UserId: userId,
|
||
PostId: param.PostId,
|
||
Content: request.Content,
|
||
}
|
||
if _, err := dao.PostComment_Insert(&data); err != nil {
|
||
logrus.Errorf("评论上传失败,request:%v", request)
|
||
reply.Status = http.StatusInternalServerError
|
||
reply.Message = "评论上传失败"
|
||
return
|
||
}
|
||
}
|
||
|
||
type QueryCommentURI struct {
|
||
PostId uint64 `uri:"post_id" binding:"min=1"`
|
||
}
|
||
|
||
type CommentInfo struct {
|
||
CommentId uint64 `json:"comment_id"`
|
||
Content string `json:"content"`
|
||
Time string `json:"time"`
|
||
UserId int32 `json:"user_id"`
|
||
Username string `json:"username"`
|
||
AvatarId string `json:"avatar_id"`
|
||
}
|
||
type QueryCommentReply struct {
|
||
CommentList []*CommentInfo `json:"comment_list"`
|
||
}
|
||
|
||
// 查询帖子所有评论
|
||
func QueryComment(c *gin.Context) {
|
||
reply := httpreply.NewDefaultReplyData()
|
||
defer httpreply.Reply(c, reply)
|
||
|
||
var param QueryCommentURI
|
||
if err := c.ShouldBindUri(¶m); err != nil {
|
||
reply.Status = http.StatusBadRequest
|
||
reply.Message = fmt.Sprintf("invalid uri path,err:%v", err)
|
||
return
|
||
}
|
||
|
||
list, err := dao.PostComment_QueryListByPostId(param.PostId)
|
||
if err != nil {
|
||
logrus.Errorf("查询评论列表失败,post_id:%v", param.PostId)
|
||
reply.Status = http.StatusInternalServerError
|
||
reply.Message = "查询评论列表失败"
|
||
return
|
||
}
|
||
mapUserIdExists := make(map[int32]bool)
|
||
listUserId := make([]int32, 0)
|
||
commentList := make([]*CommentInfo, len(list))
|
||
for i, data := range list {
|
||
user_id := data.UserId
|
||
commentList[i] = &CommentInfo{
|
||
CommentId: data.ID,
|
||
Content: data.Content,
|
||
Time: data.CreatedAt.Format(time.DateTime),
|
||
UserId: data.UserId,
|
||
}
|
||
if !mapUserIdExists[user_id] {
|
||
listUserId = append(listUserId, user_id)
|
||
}
|
||
}
|
||
|
||
if len(listUserId) > 0 {
|
||
// 批量查询评论用户的头像和名称
|
||
mapBaseInfo, err := dao.User_Query_List_BaseInfo(listUserId)
|
||
if err != nil {
|
||
logrus.Errorf("查询评论用户基本信息失败,listUserId:%v,err:%v", listUserId, err)
|
||
reply.Status = http.StatusInternalServerError
|
||
reply.Message = "查询评论用户基本信息失败"
|
||
return
|
||
}
|
||
for i, data := range list {
|
||
user_id := data.UserId
|
||
commentList[i].Username = mapBaseInfo[user_id].Username
|
||
commentList[i].AvatarId = mapBaseInfo[user_id].AvatarId
|
||
}
|
||
}
|
||
|
||
reply.Data = QueryCommentReply{CommentList: commentList}
|
||
}
|
||
|
||
type DeleteCommentURI struct {
|
||
PostId uint64 `uri:"post_id" binding:"min=1"`
|
||
CommentId uint64 `uri:"comment_id" binding:"min=1"`
|
||
}
|
||
|
||
// 删除评论
|
||
func DeleteComment(c *gin.Context) {
|
||
reply := httpreply.NewDefaultReplyData()
|
||
defer httpreply.Reply(c, reply)
|
||
|
||
userId, ok := help.GetUserId(c)
|
||
if !ok {
|
||
reply.Status = http.StatusNotFound
|
||
reply.Message = "无法获取用户信息"
|
||
return
|
||
}
|
||
|
||
var param DeleteCommentURI
|
||
if err := c.ShouldBindUri(¶m); err != nil {
|
||
reply.Status = http.StatusBadRequest
|
||
reply.Message = fmt.Sprintf("invalid uri path,err:%v", err)
|
||
return
|
||
}
|
||
|
||
if err := dao.PostComment_Delete(param.CommentId); err != nil {
|
||
logrus.Errorf("删除评论失败,userId:%d,param:%v,err:%v", userId, param, err)
|
||
reply.Status = http.StatusInternalServerError
|
||
reply.Message = "删除评论失败"
|
||
return
|
||
}
|
||
}
|