236 lines
7.1 KiB
Go
236 lines
7.1 KiB
Go
package comment_api
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/acmestack/gorm-plus/gplus"
|
|
ginI18n "github.com/gin-contrib/i18n"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/mssola/useragent"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"schisandra-cloud-album/api/comment_api/dto"
|
|
"schisandra-cloud-album/common/enum"
|
|
"schisandra-cloud-album/common/result"
|
|
"schisandra-cloud-album/global"
|
|
"schisandra-cloud-album/model"
|
|
"schisandra-cloud-album/utils"
|
|
"time"
|
|
)
|
|
|
|
// CommentSubmit 提交评论
|
|
// @Summary 提交评论
|
|
// @Description 提交评论
|
|
// @Tags 评论
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param comment_request body dto.CommentRequest true "评论请求"
|
|
// @Router /auth/comment/submit [post]
|
|
func (CommentAPI) CommentSubmit(c *gin.Context) {
|
|
commentRequest := dto.CommentRequest{}
|
|
if err := c.ShouldBindJSON(&commentRequest); err != nil {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
|
|
return
|
|
}
|
|
|
|
if commentRequest.Content == "" || commentRequest.UserID == "" || commentRequest.TopicId == "" {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
|
|
return
|
|
}
|
|
if len(commentRequest.Images) > 3 {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "TooManyImages"), c)
|
|
return
|
|
}
|
|
|
|
userAgent := c.GetHeader("User-Agent")
|
|
if userAgent == "" {
|
|
global.LOG.Errorln("user-agent is empty")
|
|
return
|
|
}
|
|
ua := useragent.New(userAgent)
|
|
|
|
ip := utils.GetClientIP(c)
|
|
location, err := global.IP2Location.SearchByStr(ip)
|
|
if err != nil {
|
|
global.LOG.Errorln(err)
|
|
return
|
|
}
|
|
location = utils.RemoveZeroAndAdjust(location)
|
|
|
|
browser, _ := ua.Browser()
|
|
operatingSystem := ua.OS()
|
|
isAuthor := 0
|
|
if commentRequest.UserID == commentRequest.Author {
|
|
isAuthor = 1
|
|
}
|
|
commentReply := model.ScaCommentReply{
|
|
Content: commentRequest.Content,
|
|
UserId: commentRequest.UserID,
|
|
TopicId: commentRequest.TopicId,
|
|
TopicType: enum.CommentTopicType,
|
|
CommentType: enum.COMMENT,
|
|
Author: isAuthor,
|
|
CommentIp: ip,
|
|
Location: location,
|
|
Browser: browser,
|
|
OperatingSystem: operatingSystem,
|
|
}
|
|
|
|
if err = commentReplyService.CreateCommentReply(&commentReply); err != nil {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "CommentSubmitFailed"), c)
|
|
return
|
|
}
|
|
|
|
if len(commentRequest.Images) > 0 {
|
|
commentImages := CommentImages{
|
|
TopicId: commentRequest.TopicId,
|
|
CommentId: commentReply.Id,
|
|
UserId: commentRequest.UserID,
|
|
Images: commentRequest.Images,
|
|
CreatedAt: time.Now().Format("2006-01-02 15:04:05"),
|
|
}
|
|
if _, err = global.MongoDB.Database(global.CONFIG.MongoDB.DB).Collection("comment_images").InsertOne(context.Background(), commentImages); err != nil {
|
|
global.LOG.Errorln(err)
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "CommentSubmitFailed"), c)
|
|
return
|
|
}
|
|
}
|
|
result.OkWithMessage(ginI18n.MustGetMessage(c, "CommentSubmitSuccess"), c)
|
|
return
|
|
}
|
|
|
|
// ReplySubmit 提交回复
|
|
// @Summary 提交回复
|
|
// @Description 提交回复
|
|
// @Tags 评论
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param reply_comment_request body dto.ReplyCommentRequest true "回复评论请求"
|
|
// @Router /auth/reply/submit [post]
|
|
func (CommentAPI) ReplySubmit(c *gin.Context) {
|
|
replyCommentRequest := dto.ReplyCommentRequest{}
|
|
if err := c.ShouldBindJSON(&replyCommentRequest); err != nil {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
|
|
return
|
|
}
|
|
|
|
if replyCommentRequest.Content == "" ||
|
|
replyCommentRequest.UserID == "" ||
|
|
replyCommentRequest.TopicId == "" ||
|
|
replyCommentRequest.ReplyId == "" ||
|
|
replyCommentRequest.ReplyUser == "" {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
|
|
return
|
|
}
|
|
if len(replyCommentRequest.Images) > 3 {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "TooManyImages"), c)
|
|
return
|
|
}
|
|
|
|
userAgent := c.GetHeader("User-Agent")
|
|
if userAgent == "" {
|
|
global.LOG.Errorln("user-agent is empty")
|
|
return
|
|
}
|
|
ua := useragent.New(userAgent)
|
|
|
|
ip := utils.GetClientIP(c)
|
|
location, err := global.IP2Location.SearchByStr(ip)
|
|
if err != nil {
|
|
global.LOG.Errorln(err)
|
|
return
|
|
}
|
|
location = utils.RemoveZeroAndAdjust(location)
|
|
|
|
browser, _ := ua.Browser()
|
|
operatingSystem := ua.OS()
|
|
isAuthor := 0
|
|
if replyCommentRequest.UserID == replyCommentRequest.Author {
|
|
isAuthor = 1
|
|
}
|
|
commentReply := model.ScaCommentReply{
|
|
Content: replyCommentRequest.Content,
|
|
UserId: replyCommentRequest.UserID,
|
|
TopicId: replyCommentRequest.TopicId,
|
|
TopicType: enum.CommentTopicType,
|
|
CommentType: enum.REPLY,
|
|
ReplyId: replyCommentRequest.ReplyId,
|
|
ReplyUser: replyCommentRequest.ReplyUser,
|
|
Author: isAuthor,
|
|
CommentIp: ip,
|
|
Location: location,
|
|
Browser: browser,
|
|
OperatingSystem: operatingSystem,
|
|
}
|
|
|
|
if err = commentReplyService.CreateCommentReply(&commentReply); err != nil {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "CommentSubmitFailed"), c)
|
|
return
|
|
}
|
|
|
|
if len(replyCommentRequest.Images) > 0 {
|
|
commentImages := CommentImages{
|
|
TopicId: replyCommentRequest.TopicId,
|
|
CommentId: commentReply.Id,
|
|
UserId: replyCommentRequest.UserID,
|
|
Images: replyCommentRequest.Images,
|
|
CreatedAt: time.Now().Format("2006-01-02 15:04:05"),
|
|
}
|
|
if _, err = global.MongoDB.Database(global.CONFIG.MongoDB.DB).Collection("comment_images").InsertOne(context.Background(), commentImages); err != nil {
|
|
global.LOG.Errorln(err)
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "CommentSubmitFailed"), c)
|
|
return
|
|
}
|
|
}
|
|
result.OkWithMessage(ginI18n.MustGetMessage(c, "CommentSubmitSuccess"), c)
|
|
return
|
|
}
|
|
|
|
// CommentList 获取评论列表
|
|
// @Summary 获取评论列表
|
|
// @Description 获取评论列表
|
|
// @Tags 评论
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param comment_list_request body dto.CommentListRequest true "评论列表请求"
|
|
// @Router /auth/comment/list [post]
|
|
func (CommentAPI) CommentList(c *gin.Context) {
|
|
commentListRequest := dto.CommentListRequest{}
|
|
err := c.ShouldBindJSON(&commentListRequest)
|
|
if err != nil {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
|
|
return
|
|
}
|
|
if commentListRequest.TopicId == "" {
|
|
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
|
|
return
|
|
}
|
|
query, u := gplus.NewQuery[model.ScaCommentReply]()
|
|
page := gplus.NewPage[model.ScaCommentReply](commentListRequest.Page, commentListRequest.Size)
|
|
query.Eq(&u.TopicId, commentListRequest.TopicId).OrderByDesc(&u.Likes)
|
|
page, _ = gplus.SelectPage(page, query)
|
|
|
|
var commentsWithImages []CommentData
|
|
|
|
for _, user := range page.Records {
|
|
// 获取评论图片
|
|
commentImages := CommentImages{}
|
|
wrong := global.MongoDB.Database(global.CONFIG.MongoDB.DB).Collection("comment_images").FindOne(context.Background(), bson.M{"comment_id": user.Id}).Decode(&commentImages)
|
|
if wrong != nil && !errors.Is(wrong, mongo.ErrNoDocuments) {
|
|
global.LOG.Errorln(wrong)
|
|
}
|
|
commentsWithImages = append(commentsWithImages, CommentData{
|
|
Comment: *user,
|
|
Images: commentImages.Images,
|
|
})
|
|
}
|
|
response := CommentResponse{
|
|
Comments: commentsWithImages,
|
|
Size: page.Size,
|
|
Current: page.Current,
|
|
Total: page.Total,
|
|
}
|
|
result.OkWithData(response, c)
|
|
return
|
|
}
|