Files
huangguo_server/models/v/audioanchormod/audioanchormod.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

324 lines
9.2 KiB
Go

package audioanchormod
import (
"encoding/json"
"errors"
"fmt"
"time"
"91porn-server/app/appg"
"91porn-server/app/service/searcher"
"91porn-server/common"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/models"
"91porn-server/models/commod"
"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"
)
const table = models.AudioAnchor
func coll(t *db.MongoTool) *db.MongoTool {
if t == nil {
return mdb.Coll(table)
}
return t.Coll(table)
}
func GetByID(id primitive.ObjectID) (loufeng AudioAnchor, err error) {
if err = coll(nil).FindOne(&loufeng, bson.M{"_id": id}); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetByID", table, "FindOne", err), log.Any("id", id.Hex()))
}
return
}
// todo app
func GetInIds(ids []primitive.ObjectID) (res []AudioAnchor, err error) {
data := make([]AudioAnchor, 0)
f := bson.M{}
if ids != nil {
f["_id"] = bson.M{"$in": ids}
}
if err = coll(nil).Find(&data, f); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetInIds", table, "Find", err), log.Any("cond", f))
return
}
tempM := make(map[primitive.ObjectID]AudioAnchor)
for i := range data {
tempM[data[i].ID] = data[i]
}
res = make([]AudioAnchor, len(ids))
for i := range ids {
res[i] = tempM[ids[i]]
}
return
}
func GetRandomPush(size int) (data []AudioAnchor, err error) {
data = make([]AudioAnchor, 0)
f := bson.M{"name": bson.M{"$gt": ""}}
if err = coll(nil).Find(&data, f); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetRandomPush", table, "Aggregate", err), log.Any("filter", f))
return
}
return
}
func GetByName(name string) (data AudioAnchor, err error) {
f := bson.M{"name": name}
if err = coll(nil).FindOne(&data, f); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetByFType", table, "Find", err), log.Any("cond", f))
return
}
return
}
func GetFTypes() ([]interface{}, error) {
data := make([]interface{}, 0)
redisKey := RedisSetKey + ":fType"
redisc := appg.Redis
if redisc == nil || !redisc.Exists(redisKey) {
data, err := coll(nil).Distinct("fType", bson.M{})
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetCitys", table, "Distinct", err))
return nil, err
}
if redisc == nil {
return data, nil
}
jsonBytes, err := json.Marshal(data)
if err != nil {
return data, err
}
_ = redisc.Set(redisKey, string(jsonBytes), time.Minute*10)
return data, nil
}
str, err := redisc.Get(redisKey)
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetFTypes", table, "Find", err))
return nil, err
}
if str == nil {
return data, errors.New("redis key is null")
}
return data, json.Unmarshal([]byte(*str), &data)
}
func GetSortWord(page commod.Page, sortWord string) ([]AudioAnchor, bool, error) {
data := make([]AudioAnchor, 0)
skip := int64(page.Skip())
limit := int64(page.Limit() + 1)
opts := options.FindOptions{
Skip: &skip,
Limit: &limit,
Sort: bson.D{{Key: sortWord, Value: -1}},
}
f := bson.M{"name": bson.M{"$gt": ""}}
if err := coll(nil).Find(&data, f, &opts); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetByFType", table, "Find", err), log.Any("cond", f))
return data, false, err
}
hasNext := false
if uint64(len(data)) > page.PageSize {
hasNext = true
data = data[:page.PageSize]
}
return data, hasNext, nil
}
func SearchName(name string, page commod.Page) (data []AudioAnchorAppRes, hasNext bool, err error) {
data = make([]AudioAnchorAppRes, 0)
skip := int64(page.Skip())
limit := int64(page.Limit() + 1)
opts := options.FindOptions{
Skip: &skip,
Limit: &limit,
Sort: bson.D{{Key: "createdAt", Value: 1}},
}
f := bson.M{}
f["$or"] = bson.A{
bson.M{"name": primitive.Regex{
Pattern: name,
Options: "",
}},
}
if err = coll(nil).Find(&data, f, &opts); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "SearchName", table, "Find", err), log.Any("cond", f))
return
}
if uint64(len(data)) > page.PageSize {
hasNext = true
data = data[:page.PageSize]
}
return
}
func IncCount(id primitive.ObjectID, inc CountInc) error {
res, err := coll(nil).UpdateOne(bson.M{"_id": id}, bson.M{"$inc": inc})
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "IncCount", table, "UpdateOne", err), log.Any("id", id), log.Any("inc", inc))
return err
}
if res.ModifiedCount <= 0 {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s none", "IncCount", table, "UpdateOne"), log.Any("id", id), log.Any("inc", inc), log.Any("res", res))
return nil
}
return nil
}
func GetNew(opt searcher.Opter) (data []AudioAnchorAppRes, hasNext bool, err error) {
data = make([]AudioAnchorAppRes, 0)
skip := opt.Skip()
limit := opt.Limit()
opts := options.FindOptions{
Skip: &skip,
Limit: &limit,
Sort: bson.D{{Key: "createdAt", Value: -1}},
}
f := bson.M{"isActive": true}
if err = coll(nil).Find(&data, f, &opts); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetNew", table, "Find", err), log.Any("cond", f))
return
}
if int64(len(data)) > limit {
hasNext = true
data = data[:limit]
}
return
}
// todo web
// StdFind 通用查询
func StdFind(q QuerySelector, page commod.Page) (data []AudioAnchor, total int64, err error) {
data = make([]AudioAnchor, 0)
skip := int64(page.Skip())
limit := int64(page.Limit())
opts := options.FindOptions{
Skip: &skip,
Limit: &limit,
Sort: bson.D{{Key: "createdAt", Value: -1}},
}
f, err := common.ToBsonM(q)
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "StdFind", table, "ToBsonM", err), log.Any("cond", f))
return
}
if q.Title != nil {
f["title"] = primitive.Regex{
Pattern: *q.Title,
Options: "",
}
}
if err = coll(nil).Find(&data, f, &opts); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "StdFind", table, "Find", err), log.Any("cond", f))
return
}
total, err = coll(nil).Count(f)
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "StdFind", table, "Count", err), log.Any("cond", f))
}
return
}
// IsExisted 查询
func IsExisted(id primitive.ObjectID) (ok bool, err error) {
ok, err = coll(nil).Exists(bson.M{"_id": id})
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "IsExisted", table, "Exists", err), log.Any("id", id))
return
}
return
}
// InsertAudioAnchor 插入一条数据
func InsertAudioAnchor(p *AudioAnchor) error {
p.CreatedAt = time.Now()
if _, err := coll(nil).InsertOne(p); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertAudioAnchor", table, "InsertOne", err))
return err
}
return nil
}
// InsertBulket 插入一条数据
func InsertBulket(p []EditSelector) (err error) {
fmt.Println("------------", len(p))
now := time.Now()
wm := make([]mongo.WriteModel, len(p))
for i := range p {
filter := bson.M{"name": p[i].Name}
update := bson.M{"$inc": bson.M{"totalRaido": 1}, "$set": p[i], "$setOnInsert": bson.M{"createdAt": now}}
wm[i] = mongo.NewUpdateOneModel().
SetFilter(filter).
SetUpdate(update).
SetUpsert(true)
}
ordered := false
opts := options.BulkWriteOptions{
Ordered: &ordered,
}
if _, err = coll(nil).Bulk(wm, &opts); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertMany", table, "InsertMany", err))
}
return
}
// InsertAudioAnchor 插入一条数据
func InsertMany(p []AudioAnchor) error {
if _, err := coll(nil).InsertMany(p); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertMany", table, "InsertMany", err))
return err
}
return nil
}
// UpdateAudioAnchor 修改AudioAnchor类型
func UpdateAudioAnchor(set *EditSelector) error {
set.UpdatedAt = time.Now()
if _, err := coll(nil).UpdateOne(bson.M{"_id": set.ID}, bson.M{"$set": set}); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateAudioAnchor", table, "UpdateOne", err),
log.Any("set", set),
)
return err
}
return nil
}
// RemoveAudioAnchor 删除AudioAnchor类型
func RemoveAudioAnchor(id string) error {
OID, err := primitive.ObjectIDFromHex(id)
if err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "RemoveAudioAnchor", table, "ObjectIDFromHex", err),
log.Any("id", id),
)
return err
}
if _, err = coll(nil).DeleteOne(bson.M{"_id": OID}); err != nil {
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "RemoveAudioAnchor", table, "DeleteOne", err),
log.Any("OID", OID),
)
return err
}
return nil
}
// todo skd
// 获取ES同步数据
func GetListByUpdateTimeRange(start time.Time, end time.Time) (data []AudioAnchor, err error) {
var query = bson.M{
"updatedAt": bson.M{"$gte": start, "$lt": end},
}
if err = coll(nil).Find(&data, query); err != nil {
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "GetListByUpdateTimeRange", table, "Find", err),
log.Any("start", start),
log.Any("end", end),
)
return
}
return
}