@@ -0,0 +1,238 @@
|
||||
package modulevidmod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/db"
|
||||
"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"
|
||||
)
|
||||
|
||||
var mdb *db.MongoDB
|
||||
|
||||
const table = models.SectionVideo
|
||||
|
||||
// InitIndex 设置index
|
||||
func initIndex() {
|
||||
many := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{{Key: "sectionID", Value: 1}, {Key: "videoID", Value: 1}},
|
||||
Options: options.Index().SetUnique(true),
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{Key: "sectionID", Value: 1}, {Key: "sortCode", Value: -1}, {Key: "videoReviewedAt", Value: -1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{Key: "sectionID", Value: 1}, {Key: "newsType", Value: 1}, {Key: "sortCode", Value: -1}, {Key: "videoReviewedAt", Value: -1}},
|
||||
},
|
||||
// 改类型的时候,需要根据videoID变更newsType
|
||||
{
|
||||
Keys: bson.D{{Key: "videoID", Value: 1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{Key: "sectionID", Value: 1}, {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)
|
||||
}
|
||||
|
||||
// InsertOne 插入一条数据
|
||||
func InsertOne(p *SectionVideo) error {
|
||||
p.CreatedAt = time.Now()
|
||||
_, err := coll(nil).InsertOne(p)
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateNewsTypeByVideoID(videoID primitive.ObjectID, newsType string) (err error) {
|
||||
filter := bson.M{"videoID": videoID}
|
||||
_, err = coll(nil).UpdateOne(filter, bson.M{"$set": bson.M{"newsType": newsType}})
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateOne 更新一条数据
|
||||
func UpdateOne(set *EditSelector) error {
|
||||
set.UpdatedAt = time.Now()
|
||||
var filter primitive.M
|
||||
if set.ID != nil && !set.ID.IsZero() {
|
||||
filter = bson.M{"_id": set.ID}
|
||||
} else if set.SectionID != nil && !set.SectionID.IsZero() && set.VideoID != nil && !set.VideoID.IsZero() {
|
||||
filter = bson.M{"sectionID": set.SectionID, "videoID": set.VideoID}
|
||||
}
|
||||
_, err := coll(nil).UpdateOne(filter, bson.M{"$set": set})
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteOne 删除一条数据
|
||||
func DeleteOne(id primitive.ObjectID) (err error) {
|
||||
_, err = coll(nil).DeleteById(id)
|
||||
return
|
||||
}
|
||||
|
||||
// BatchDeleteVideo 批量删除专题下视频
|
||||
func BatchDeleteVideo(ctx context.Context, sectionID primitive.ObjectID, vids []primitive.ObjectID) error {
|
||||
_, err := coll(nil).DeleteMany(bson.M{"sectionID": sectionID, "videoID": bson.M{"$in": vids}})
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteManyVideo 批量删除专题下视频
|
||||
func DeleteManyVideo(ids []primitive.ObjectID) error {
|
||||
_, err := coll(nil).DeleteMany(bson.M{"_id": bson.M{"$in": ids}})
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteManyByVids 批量删除专题下视频,根据视频ID
|
||||
func DeleteManyByVids(vids []primitive.ObjectID) error {
|
||||
_, err := coll(nil).DeleteMany(bson.M{"videoID": bson.M{"$in": vids}})
|
||||
return err
|
||||
}
|
||||
|
||||
// Search 根据条件检索
|
||||
func Search(q *QuerySelector, page commod.Page) (videos []SectionVideo, hasNext bool, total int64, err error) {
|
||||
filter, err := common.ToBsonM(q)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
skip := int64(page.Skip())
|
||||
limit := int64(page.Limit() + 1)
|
||||
opts := options.FindOptions{
|
||||
Skip: &skip,
|
||||
Limit: &limit,
|
||||
Sort: page.GetSort(),
|
||||
}
|
||||
if err = coll(nil).Find(&videos, filter, &opts); err != nil {
|
||||
return
|
||||
}
|
||||
total, err = coll(nil).Count(filter)
|
||||
if uint64(len(videos)) > page.Limit() {
|
||||
hasNext = true
|
||||
videos = videos[:page.Limit()]
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Find 查询所有
|
||||
func Find(filter primitive.M, opts ...*options.FindOptions) ([]SectionVideo, error) {
|
||||
var videos []SectionVideo
|
||||
return videos, coll(nil).Find(&videos, filter, opts...)
|
||||
}
|
||||
|
||||
func GetBySectionIDWithPage(sectionID primitive.ObjectID, page commod.Page) (videoIDs []primitive.ObjectID, hasNext bool, err error) {
|
||||
projection := bson.D{
|
||||
{Key: "_id", Value: 0},
|
||||
{Key: "videoID", Value: 1},
|
||||
}
|
||||
opts := options.FindOptions{}
|
||||
size := page.Limit()
|
||||
opts.SetProjection(projection).SetSort(page.GetSort()).SetSkip(int64(page.Skip())).SetLimit(int64(size + 1))
|
||||
var p []struct {
|
||||
VideoID primitive.ObjectID `bson:"videoID"`
|
||||
}
|
||||
if err = coll(nil).Find(&p, bson.M{"sectionID": sectionID}, &opts); err != nil {
|
||||
return
|
||||
}
|
||||
if uint64(len(p)) > size {
|
||||
hasNext = true
|
||||
p = p[:size]
|
||||
}
|
||||
videoIDs = make([]primitive.ObjectID, len(p))
|
||||
for i, v := range p {
|
||||
videoIDs[i] = v.VideoID
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// GetSectionVideosBySectionID 根据专题获取视频列表
|
||||
func GetSectionVideosBySectionID(sectionID primitive.ObjectID) (list []SectionVideo, err error) {
|
||||
err = coll(nil).Find(&list, bson.M{"sectionID": sectionID}, options.Find().SetSort(bson.D{{Key: "sortCode", Value: -1}, {Key: "videoReviewedAt", Value: -1}}))
|
||||
return
|
||||
}
|
||||
|
||||
// SectionVideosBySectionID 根据专题获取视频列表
|
||||
func SectionVideosBySectionID(sectionID primitive.ObjectID, opts *options.FindOptions) ([]SectionVideo, error) {
|
||||
var out []SectionVideo
|
||||
return out, coll(nil).Find(&out, bson.M{"sectionID": sectionID}, opts)
|
||||
}
|
||||
|
||||
func GetVideosBySectionIDs(sectionIDs []primitive.ObjectID) (list []SectionVideo, err error) {
|
||||
err = coll(nil).Find(&list, bson.M{"sectionID": bson.M{"$in": sectionIDs}})
|
||||
return
|
||||
}
|
||||
|
||||
// GetSectionVideosBySectionIDSort 根据专题获取视频列表
|
||||
func GetSectionVideosBySectionIDSort(sectionID primitive.ObjectID, limit int64) (list []SectionVideo, err error) {
|
||||
err = coll(nil).Find(&list, bson.M{"sectionID": sectionID}, options.Find().SetSort(bson.D{{Key: "SortCode", Value: -1}}).SetLimit(limit))
|
||||
return
|
||||
}
|
||||
|
||||
func GetBySectionIDAndVids(sectionID primitive.ObjectID, vids []primitive.ObjectID) (videos []SectionVideo, err error) {
|
||||
filter := bson.M{"videoID": bson.M{"$in": vids}}
|
||||
if !sectionID.IsZero() {
|
||||
filter["sectionID"] = sectionID
|
||||
}
|
||||
err = coll(nil).Find(&videos, filter)
|
||||
return
|
||||
}
|
||||
|
||||
func GetBySectionID(sectionID primitive.ObjectID, isSorted bool) (videoIDs []primitive.ObjectID, err error) {
|
||||
projection := bson.D{
|
||||
{Key: "_id", Value: 0},
|
||||
{Key: "videoID", Value: 1},
|
||||
}
|
||||
opts := options.FindOptions{}
|
||||
opts.SetProjection(projection)
|
||||
var p []struct {
|
||||
VideoID primitive.ObjectID `bson:"videoID"`
|
||||
}
|
||||
filter := bson.M{"sectionID": sectionID}
|
||||
if isSorted {
|
||||
filter["sortCode"] = bson.M{"$gt": 0}
|
||||
opts.SetSort(bson.D{{Key: "sortCode", Value: -1}, {Key: "videoReviewedAt", Value: -1}})
|
||||
}
|
||||
if err = coll(nil).Find(&p, filter, &opts); err != nil {
|
||||
return
|
||||
}
|
||||
videoIDs = make([]primitive.ObjectID, len(p))
|
||||
for i, v := range p {
|
||||
videoIDs[i] = v.VideoID
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func InsertMany(records []SectionVideo) error {
|
||||
opts := options.InsertMany().SetOrdered(false)
|
||||
_, err := coll(nil).InsertMany(records, opts)
|
||||
if !db.IsMongoDupKey(err) {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetSectionsByVideoId(id primitive.ObjectID) ([]SectionVideo, error) {
|
||||
if id.IsZero() {
|
||||
return nil, nil
|
||||
}
|
||||
var svs []SectionVideo
|
||||
return svs, coll(nil).Find(&svs, bson.M{"videoID": id})
|
||||
}
|
||||
|
||||
func GetSectionsByVideoIds(ids []primitive.ObjectID) ([]SectionVideo, error) {
|
||||
var svs []SectionVideo
|
||||
return svs, coll(nil).Find(&svs, bson.M{"videoID": bson.M{"$in": ids}})
|
||||
}
|
||||
Reference in New Issue
Block a user