Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package commentlikemod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
const collectionName = "comment_like"
|
||||
|
||||
const CollectionName = collectionName
|
||||
|
||||
type CommentLike struct {
|
||||
UserId int64 `bson:"userId"`
|
||||
CommentId int64 `bson:"commentId"`
|
||||
CreatedAt time.Time `bson:"createdAt"`
|
||||
}
|
||||
|
||||
var coll *mongos.Collection
|
||||
|
||||
func Init(ctx context.Context) {
|
||||
coll = mongos.Shop.Coll(collectionName)
|
||||
indexes := []mongo.IndexModel{
|
||||
{Keys: bson.D{{Key: "userId", Value: 1}, {Key: "commentId", Value: 1}}, Options: options.Index().SetUnique(true)},
|
||||
{Keys: bson.D{{Key: "commentId", Value: 1}}},
|
||||
}
|
||||
if _, err := coll.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("commentlikemod.Init CreateIndex failed: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// Add 新增点赞关系,重复点赞不改变状态
|
||||
func Add(ctx context.Context, userId, commentId int64) (bool, *srvdef.SrvErr) {
|
||||
_, err := coll.InsertOne(ctx, &CommentLike{UserId: userId, CommentId: commentId, CreatedAt: time.Now()})
|
||||
if mongo.IsDuplicateKeyError(err) {
|
||||
return false, nil
|
||||
}
|
||||
if err != nil {
|
||||
log.Warn("commentlikemod.Add", log.E(err))
|
||||
return false, srvdef.New(srvdef.ErrDbInsertError, "", "")
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// Remove 删除点赞关系,重复取消不改变状态
|
||||
func Remove(ctx context.Context, userId, commentId int64) (bool, *srvdef.SrvErr) {
|
||||
count, err := coll.DeleteOne(ctx, bson.M{"userId": userId, "commentId": commentId})
|
||||
if err != nil {
|
||||
log.Warn("commentlikemod.Remove", log.E(err))
|
||||
return false, srvdef.New(srvdef.ErrDbDeleteError, "", "")
|
||||
}
|
||||
return count > 0, nil
|
||||
}
|
||||
|
||||
// FindByUserAndComments 批量查询当前用户的评论点赞关系
|
||||
func FindByUserAndComments(ctx context.Context, userId int64, commentIds []int64) ([]CommentLike, *srvdef.SrvErr) {
|
||||
result := make([]CommentLike, 0)
|
||||
if userId <= 0 || len(commentIds) == 0 {
|
||||
return result, nil
|
||||
}
|
||||
err := coll.Find(ctx, &result, bson.M{"userId": userId, "commentId": bson.M{"$in": commentIds}})
|
||||
if err != nil {
|
||||
log.Warn("commentlikemod.FindByUserAndComments", log.E(err))
|
||||
return nil, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// DeleteByCommentIds 清理已删除评论的点赞关系
|
||||
func DeleteByCommentIds(ctx context.Context, commentIds []int64) *srvdef.SrvErr {
|
||||
if len(commentIds) == 0 {
|
||||
return nil
|
||||
}
|
||||
_, err := coll.DeleteMany(ctx, bson.M{"commentId": bson.M{"$in": commentIds}})
|
||||
if err != nil {
|
||||
log.Warn("commentlikemod.DeleteByCommentIds", log.E(err))
|
||||
return srvdef.New(srvdef.ErrDbDeleteError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user