Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+279
View File
@@ -0,0 +1,279 @@
package likeser
import (
"91porn-server/app/service/messageser"
"91porn-server/common"
"91porn-server/common/constant"
"91porn-server/common/log"
"91porn-server/common/stderr"
topser "91porn-server/common/top"
topasist "91porn-server/common/top/asistant"
"91porn-server/models/v/aiplazamod"
"91porn-server/models/v/cmtmod"
"91porn-server/models/v/likemod"
"91porn-server/models/v/mediamod"
"91porn-server/models/v/messagemod"
"91porn-server/models/v/tagmod"
"91porn-server/models/v/usermod"
"91porn-server/models/v/vidmod"
"errors"
"fmt"
"time"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// ThumbsUp 视频/评论点赞
func ThumbsUp(ctx *gin.Context, uid uint64, objType string, objID primitive.ObjectID, tagID primitive.ObjectID) (code stderr.Code, err error) {
var publisherID uint64
var vMod vidmod.VideoModel
var cMod cmtmod.Comment
var media mediamod.Media
switch objType {
case constant.LikeTypeSP, constant.LikeTypeShort, constant.LikeTypeCover, constant.LikeTypePic, constant.LikeTypeSEED_LINK:
publisherID, vMod, err = handleVideo(objID)
if err != nil {
return stderr.Failure, err
}
case constant.LikeTypeText, constant.LikeTypeCartoon, constant.LikeTypeComics, constant.LikeTypeDrama:
media, err = handleMedia(objID)
if err != nil {
return stderr.Failure, err
}
if objType == constant.LikeTypeDrama && (media.MediaType != mediamod.MediaTypeDrama || media.Status != 1 || media.IsDelete) {
return stderr.LikeErrVideoIsInvalid, errors.New("drama is inactive")
}
case constant.AiPlaza:
// ai广场
case constant.LikeTypeComment:
publisherID, cMod, vMod, err = handleComment(objID)
if err != nil {
return stderr.Failure, err
}
publisherID = cMod.UserID
}
lMod, err := likemod.FindOneByUIDAndObjID(uid, objID)
if err != nil {
code = stderr.LikeErrGetDataFailed
log.Error("app service like ThumbsUp FindOneByUIDAndObjID err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objID", objID))
return
}
if !lMod.ID.IsZero() {
code = stderr.LikeHasAlreadyThumbs
return
}
likeMod := likemod.Like{
Type: objType,
ObjID: objID,
UserID: uid,
LikedUserID: publisherID,
}
if !tagID.IsZero() && tagmod.IsExists(tagID) {
likeMod.TagID = tagID
_ = tagmod.IncreaseTagLikeCount(tagID)
}
err = likemod.InsertOne(&likeMod)
if err != nil {
code = stderr.LikeErrThumbsFailed
log.Error("app service like ThumbsUp InsertOne err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objID", objID))
return
}
common.Go(func() {
user, err := usermod.FindUserByUID(uid)
if err != nil {
return
}
// 增加视频/评论 点赞次数
switch objType {
case constant.AiPlaza:
aiplazamod.IncLikeCount(objID)
case constant.CollectTypeSP, constant.CollectTypeShort, constant.CollectTypeCover, constant.CollectTypePIC:
topasist.Incr(topser.TypeVideo(objType), objID.Hex(), 1)
fallthrough
case constant.LikeTypeSEED_LINK:
if err := vidmod.IncrementRecommendInteraction(objID, vidmod.RecommendInteractionLike); err != nil {
log.Error("increment recommend like failed", log.E(err), log.Any("objID", objID))
}
err = vidmod.IncLikeCount(objID)
if err != nil {
code = stderr.LikeErrIncCountFailed
log.Error("app service like ThumbsUp IncLikeCount err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objID", objID))
return
}
// 发送动态消息
_ = messageser.DynamicMsgUserGroup(messagemod.PublicAddMsg{
SendUid: uid,
TakeUid: vMod.PublisherID,
MsgType: messagemod.LikeMsg,
ObjId: vMod.ID,
ObjName: vMod.Title,
ObjCover: vMod.Cover,
ObjType: vMod.NewsType,
})
break
case constant.LikeTypeComment:
err = cmtmod.CmtIncreaseLikeCountByID(1, objID)
if err != nil {
code = stderr.LikeErrIncCountFailed
log.Error("app service like ThumbsUp CmtIncreaseLikeCountByID err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objID", objID))
return
}
dynamicContent := fmt.Sprintf("%s 于 %s 点赞了你的评论", user.Name, time.Now().Format("15:04:05"))
if !vMod.ID.IsZero() && vMod.PublisherID > 0 {
// 增加点赞消息通知动态
messageser.DynamicMsgUserGroup(messagemod.PublicAddMsg{
SendUid: uid,
TakeUid: publisherID,
MsgType: messagemod.LikeCommentMsg,
ObjId: vMod.ID,
ObjName: vMod.Title,
ObjCover: vMod.Cover,
ObjType: vMod.NewsType,
Content: dynamicContent,
})
}
case constant.LikeTypeCartoon, constant.LikeTypeComics, constant.LikeTypeText, constant.LikeTypeDrama:
err = mediamod.IncreaseCountLikeByIDs(1, objID)
if err != nil {
log.Error("app service media like ThumbsUp IncreaseLikeCountByID err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objID", objID))
}
if err != nil {
log.Error("ReportVideoPurchase fail", log.E(err))
code = stderr.LikeErrThumbsFailed
}
}
})
code = stderr.Success
return
}
func handleMedia(id primitive.ObjectID) (media mediamod.Media, err error) {
// 获取播单列表
media, err = mediamod.GetInfo(id)
if err != nil {
return media, err
}
if media.ID.IsZero() {
return media, errors.New("media is null")
}
return media, nil
}
func handleVideo(id primitive.ObjectID) (uid uint64, vMod vidmod.VideoModel, err error) {
var publishId uint64
vMod, err = vidmod.GetVideoInfo(id.Hex())
if err != nil {
log.Error("app service like ThumbsUp GetVideoInfo err", log.E(err), log.Any("uid", uid), log.Any("objID", id))
return publishId, vMod, err
}
if vMod.ID.IsZero() {
log.Error("app service like ThumbsUp video mod is nil err", log.Any("uid", uid), log.Any("objID", id))
return publishId, vMod, errors.New("video is null")
}
// 视频未通过审核/未审核
if vMod.Status != 1 && vMod.Status != 3 {
return publishId, vMod, errors.New("video is status is err")
}
publishId = vMod.PublisherID
// 增加作者点赞数
common.Go(func() {
usermod.IncLikeCount(publishId)
})
return publishId, vMod, nil
}
func handleComment(id primitive.ObjectID) (publishId uint64, cMod cmtmod.Comment, vMod vidmod.VideoModel, err error) {
cMod, err = cmtmod.CmtFindOneByID(id)
if err != nil {
err = stderr.ErrDbQueryError
return
}
if cMod.ID.IsZero() {
err = stderr.ErrDbQueryError
}
if cMod.ObjType == "video" {
// 获取视频
vMod, err = vidmod.GetVideoInfo(cMod.ObjID.Hex())
if err != nil {
err = stderr.ErrDbQueryError
log.Error("app service like ThumbsUp GetVideoInfo err", log.E(err), log.Any("objID", cMod.ObjID.Hex()))
return
}
if vMod.ID.IsZero() {
err = stderr.ErrDbQueryError
log.Error("app service like ThumbsUp video mod is nil err", log.Any("objID", cMod.ObjID.Hex()))
return
}
// 视频未通过审核/未审核
if vMod.Status != 1 && vMod.Status != 3 {
err = stderr.LikeErrVideoIsInvalid
return
}
}
return cMod.UserID, cMod, vMod, err
}
// ThumbsDown 取消点赞
func ThumbsDown(ctx *gin.Context, uid uint64, objType string, objIDs ...primitive.ObjectID) (code stderr.Code, err error) {
if len(objIDs) == 0 {
return stderr.Success, nil
}
lMods, err := likemod.FindLikesByObjIDS(objType, uid, objIDs)
if err != nil {
code = stderr.LikeErrGetDataFailed
log.Error("app service like ThumbsDown FindOneByUIDAndObjID err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objIDs", objIDs))
return
}
if len(lMods) == 0 {
code = stderr.LikeHasNotThumbs
return
}
err = likemod.DeleteMany(uid, objType, objIDs)
if err != nil {
code = stderr.LikeErrThumbsFailed
log.Error("app service like ThumbsDown DeleteOne err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objIDs", objIDs))
return
}
// 减少视频/评论 点赞数
switch objType {
case constant.AiPlaza:
aiplazamod.DecLikeCount(objIDs)
case constant.LikeTypeSP, constant.LikeTypeShort, constant.LikeTypeCover, constant.LikeTypePic, constant.LikeTypeSEED_LINK:
err = vidmod.DecLikeCount(objIDs...)
if err != nil {
code = stderr.LikeErrDecCountFailed
log.Error("app service like ThumbsDown DecLikeCount err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objIDs", objIDs))
return
}
case constant.LikeTypeCartoon, constant.LikeTypeComics, constant.LikeTypeText, constant.LikeTypeDrama:
err = mediamod.IncreaseCountLikeByIDs(-1, objIDs...)
if err != nil {
code = stderr.LikeErrGetDataFailed
return
}
case constant.LikeTypeComment:
err = cmtmod.CmtIncreaseLikeCountByID(-1, objIDs...)
if err != nil {
code = stderr.LikeErrDecCountFailed
log.Error("app service like ThumbsDown CmtIncreaseLikeCountByID err", log.E(err), log.Any("uid", uid), log.Any("objType", objType), log.Any("objIDs", objIDs))
return
}
}
code = stderr.Success
return
}