package commentctrl import ( "91porn-server/app/service/commentser" "91porn-server/common" "91porn-server/common/log" "91porn-server/common/stderr" "91porn-server/models/commod" "91porn-server/models/v/aiplazamod" "91porn-server/models/v/cmtmod" "91porn-server/models/v/mediamod" "91porn-server/models/v/noticerecdmod" "time" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson/primitive" ) // List doc // @Summary 评论模块 - 获取评论列表 // @Description 用户评论 // @Tags Comment // @Accept mpfd,json // @Produce json,html // @Param objID query string true "评论对象的ID" // @Param curTime query string true "打开评论列表的时间" // @Param objType query string true "评论对象类型 video/cartoon/drama/AiPlaza" // @Param pageNumber query integer true "当前页" mininum(1) // @Param pageSize query integer true "每页条数" mininum(1) // @Success 200 {object} cmtmod.ParentRespList "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/app/comment/list [get] func List(ctx *gin.Context) { uid, _ := common.GetUID(ctx) type Info struct { ObjID string `form:"objID" json:"objID" binding:"required"` //评论对象的ID CurTime time.Time `form:"curTime" json:"curTime" binding:"required"` //打开评论列表的时间 ObjType string `form:"objType" json:"objType"` // 评论对象类型 video:视频(默认) cartoon:动漫 AiPlaza:ai广场 commod.Page } param := Info{} err := ctx.ShouldBind(¶m) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } objID, err := primitive.ObjectIDFromHex(param.ObjID) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } var ( data = make(map[string]interface{}) vCnt int64 = 0 fCnt int64 = 0 hasNext bool code stderr.Code ) // 获取第一层评论总数,在获取第一页评论时返回总评论数 if param.Page.PageNumber == 1 { if param.ObjType == "" || param.ObjType == "video" { code, vCnt, err := commentser.GetVideoTotalComments(objID) if err != nil { common.ServeJSON(ctx, code, err) return } data["total"] = vCnt // 总评论条数 } else if param.ObjType == cmtmod.OTypeCartoon || param.ObjType == cmtmod.OTypeDrama { media, _ := mediamod.GetInfo(objID) data["total"] = media.CountComment // 总评论条数 } else if param.ObjType == "AiPlaza" { // ai广场 aiplaza, _ := aiplazamod.GetInfo(objID) data["total"] = aiplaza.CommentCount // 总评论条数 } } else { code, fCnt, err = commentser.GetTotalComments(objID, param.ObjType) if err != nil { common.ServeJSON(ctx, code, err) return } } code, list, hasNext, err := commentser.GetParentCmtList(uid, objID, param.ObjType, param.CurTime, param.Page) if err != nil { common.ServeJSON(ctx, code, err) return } // 获取置顶快捷搜索 if param.PageNumber == 1 { list = commentser.QuickSearch(objID.Hex(), list) if len(list) == 1 && vCnt == 0 { data["total"] = 1 fCnt = 1 } } data["lfCount"] = fCnt // 一级评论条数 data["hasNext"] = hasNext data["list"] = list common.ServeJSON(ctx, code, data) } // Send doc // @Summary 评论模块 - 发表评论 // @Description 用户评论 // @Tags Comment // @Accept mpfd,json // @Produce json,html // @Param objType formData string true "评论对象类型 video:视频(默认) cartoon:动漫 AiPlaza:ai广场" // @Param objID formData string true "评论对象的ID 帖子的ID" // @Param cid formData string false "此评论是对某条评论的评论或回复 一级评论的ID,如果为空,则为对该视频的评论" // @Param rid formData string false "被回复的评论id" // @Param level formData integer false "评论层级 1:一级评论 2:二级评论" // @Param toUserID formData integer false "对某用户回复评论 用户ID" // @Param content formData string true "评论内容" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/app/comment/send [post] func Send(ctx *gin.Context) { uid, err := common.GetUID(ctx) if err != nil { common.ServeJSON(ctx, stderr.ErrNoToken, err) return } param := cmtmod.PublishReqInfo{} err = ctx.ShouldBind(¶m) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } if param.Level != 1 && param.Level != 2 { common.ServeJSON(ctx, stderr.ErrParamError, err) return } if param.Content == "" && param.Image == "" { common.ServeJSON(ctx, stderr.ErrParamError, err) return } ua, err := common.GetUA(ctx) if err != nil { common.ServeJSON(ctx, stderr.Failure, err.Error()) return } ip := common.GetIP(ctx) code, data, err := commentser.PublishComment(uid, ua, ip, param) if err != nil { common.ServeJSON(ctx, code, err) return } if code == stderr.CommentUserNotBind { common.ServeJSON(ctx, code, nil) return } common.ServeJSON(ctx, code, data) } // NoVidSend doc // @Summary 评论模块 - 发表评论,非视频帖子评论 // @Description 用户评论 // @Tags Comment // @Accept mpfd,json // @Produce json,html // @Param objID formData string true "评论对象的ID 帖子的ID" // @Param cid formData string false "此评论是对某条评论的评论或回复 一级评论的ID,如果为空,则为对该视频的评论" // @Param rid formData string false "被回复的评论id" // @Param level formData integer false "评论层级 1:一级评论 2:二级评论" // @Param toUserID formData integer false "对某用户回复评论 用户ID" // @Param content formData string true "评论内容" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /comment/sendV2 [post] func NoVidSend(ctx *gin.Context) { uid, err := common.GetUID(ctx) if err != nil { common.ServeJSON(ctx, stderr.ErrNoToken, err) return } type Info struct { CmtType string `form:"cmtType" json:"cmtType"` //评论类型,desire:愿望工单 cmtmod.PublishReqInfo } param := Info{} err = ctx.ShouldBind(¶m) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } code, data, err := commentser.NoVidPublishComment(uid, common.GetIP(ctx), param.CmtType, param.PublishReqInfo) if err != nil { common.ServeJSON(ctx, code, err) return } if code == stderr.CommentUserNotBind { common.ServeJSON(ctx, code, nil) return } common.ServeJSON(ctx, code, data) } // Info doc // @Summary 评论模块 - 获取评论详情(获取二级评论) // @Description 用户评论 // @Tags Comment // @Accept mpfd,json // @Produce json,html // @Param objID query string true "评论对象的ID" // @Param cmtId query string true "评论id" // @Param curTime query string true "打开评论列表的时间" // @Param fstID query string true "默认展示的第一条二级评论的id" // @Param pageNumber query integer true "当前页" mininum(1) // @Param pageSize query integer true "每页条数" mininum(1) // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /comment/info [get] func Info(ctx *gin.Context) { uid, err := common.GetUID(ctx) if err != nil { common.ServeJSON(ctx, stderr.ErrNoToken, err) return } type Info struct { ObjID string `form:"objID" json:"objID" binding:"required"` //评论对象的ID CmtID string `form:"cmtId" json:"cmtId" binding:"required"` //某条评论id,用于获取该评论下的评论 FstID string `form:"fstID" json:"fstID" binding:"required"` //默认展示的第一条二级评论的id CurTime time.Time `form:"curTime" json:"curTime" binding:"required"` //打开评论列表的时间 commod.Page } param := Info{} err = ctx.ShouldBind(¶m) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } objID, err := primitive.ObjectIDFromHex(param.ObjID) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } cmtID, err := primitive.ObjectIDFromHex(param.CmtID) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } fstID, err := primitive.ObjectIDFromHex(param.FstID) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } var code stderr.Code var data []cmtmod.ChildRespList code, data, err = commentser.GetChildCmtList(uid, objID, cmtID, fstID, param.CurTime, param.Page) if err != nil { common.ServeJSON(ctx, code, err) return } var hasNext bool if len(data) > int(param.PageSize) { hasNext = true data = data[:param.PageSize] } common.ServeJSON(ctx, code, commod.ListResp{HasNext: hasNext, List: data}) } // ReplyList doc // @Summary 评论模块 - 回复列表 // @Description 回复列表 // @Tags Comment // @Accept mpfd,json // @Produce json,html // @Param pageNumber query integer true "当前页" mininum(1) // @Param pageSize query integer true "每页条数" mininum(1) // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /comment/reply/list [get] func ReplyList(c *gin.Context) { var arg struct { commod.Page } if err := c.ShouldBind(&arg); err != nil { common.ServeJSON(c, stderr.ErrParamError, "comment RecordList arg error "+err.Error()) return } // 检查uid是否存在 uid, err := common.GetUID(c) if err != nil { common.ServeJSON(c, stderr.UserIsNotExists, "comment RecordList Context USER_ID is not exist ") return } skip := (arg.PageNumber - 1) * arg.PageSize limit := arg.PageSize replyPage, err := commentser.ReplyPages(uid, int64(skip), int64(limit)) if err != nil { common.ServeJSON(c, stderr.ErrNetWorkBusy, err) return } err = noticerecdmod.UpdateTrendReadTime(noticerecdmod.Cmet, uid, time.Now()) if err != nil { log.Error("commentctrl ReplyList UpdateTrendReadTime faild", log.E(err)) } common.ServeJSON(c, stderr.Success, replyPage) }