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
+118
View File
@@ -0,0 +1,118 @@
package payaudiobookmod
import (
"fmt"
"time"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/models"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
var mdb *db.MongoDB
const table = models.PayAudioBook
// initIndex 初始化索引
func initIndex() {
many := []mongo.IndexModel{
{
Keys: bson.D{{Key: "uid", Value: 1}, {Key: "objID", Value: 1}},
Options: options.Index().SetUnique(true),
},
{
Keys: bson.D{{Key: "createdAt", Value: -1}},
},
}
if _, err := coll(nil).CreateIndex(many); err != nil {
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
}
}
func coll(t *db.MongoTool) *db.MongoTool {
if t == nil {
return mdb.Coll(table)
}
return t.Coll(table)
}
// Insert 插入一条购买记录
func Insert(p PayAudioBookHistory, t *db.MongoTool) error {
now := time.Now()
f := bson.M{
"uid": p.UID,
"objID": p.ObjID,
}
set := bson.M{
"$addToSet": bson.M{"episodeNumberSet": bson.M{"$each": p.EpisodeNumberSet}},
"$set": bson.M{"updatedAt": now},
"$setOnInsert": bson.M{"createdAt": now},
}
if _, err := coll(t).UpsertOne(f, set); err != nil {
log.Error("InsertVideoPayRecord error", log.Any("p", p), log.E(err))
return err
}
return nil
}
func FindManyPayAudioBookHistoryByUID(uid uint64) ([]*PayAudioBookHistory, error) {
vl := make([]*PayAudioBookHistory, 0)
if err := coll(nil).Find(&vl, bson.M{"uid": uid}); err != nil {
log.Error("FindManyPayAudioBookHistoryByUID error", log.Any("uid", uid), log.E(err))
return nil, err
}
return vl, nil
}
// 判断当前视频是否有人购买过
func IsVidIfBePay(id primitive.ObjectID) bool {
var pay *PayAudioBookHistory
if err := coll(nil).FindOne(&pay, bson.M{"videoID": id}); err != nil {
log.Error("IsVidIfBePay error", log.Any("videoID", id), log.E(err))
return false
}
return pay != nil
}
// DelVideoPayRecord 删除一条购买记录
func DelVideoPayRecord(videoID primitive.ObjectID, uid uint64) error {
if _, err := coll(nil).DeleteOne(bson.M{"videoID": videoID, "uid": uid}); err != nil {
log.Error("DelVideoPayRecord DeleteOne error", log.Any("videoID", videoID), log.Any("uid", uid))
return err
}
return nil
}
func FindByUIDAndObjID(uid uint64, objID primitive.ObjectID) (data PayAudioBookHistory, err error) {
if err = coll(nil).FindOne(&data, bson.M{"uid": uid, "objID": objID}); err != nil {
log.Error("FindByUID error", log.Any("uid", uid), log.E(err))
return
}
return
}
func FindByUID(uid uint64, pageNumber int64, pageSize int64) ([]*PayAudioBookHistory, bool, error) {
data := make([]*PayAudioBookHistory, 0)
skip := (pageNumber - 1) * pageSize
limit := pageSize + 1
opt := options.FindOptions{
Skip: &skip,
Limit: &limit,
Sort: bson.D{{Key: "createdAt", Value: -1}},
}
if err := coll(nil).Find(&data, bson.M{"uid": uid}, &opt); err != nil {
log.Error("FindByUID error", log.Any("uid", uid), log.E(err))
return nil, false, err
}
hasNext := false
if len(data) > int(pageSize) {
hasNext = true
data = data[:pageSize]
}
return data, hasNext, nil
}
+24
View File
@@ -0,0 +1,24 @@
package payaudiobookmod
import (
"time"
"91porn-server/common/db"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// PayAudioBookHistory 购买影片记录
type PayAudioBookHistory struct {
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
UID uint64 `json:"uid" bson:"uid"`
EpisodeNumberSet []int `json:"episodeNumberSet" bson:"episodeNumberSet"` //集数
ObjID primitive.ObjectID `json:"objID" bson:"objID"` //小说id
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
}
func Init() {
mdb = db.Init(table)
initIndex()
}