package adreviewmod import ( "fmt" "time" "91porn-server/common/db" "91porn-server/common/log" "91porn-server/common/pageopt" "91porn-server/models" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) const table = models.AdReview var mdb *db.MongoDB func coll(t *db.MongoTool) *db.MongoTool { if t == nil { return mdb.Coll(table) } return t.Coll(table) } // InitIndex 初始化索引 func initAdsIndex() { many := []mongo.IndexModel{ { Keys: bson.D{{Key: "reviewStatus", Value: 1}, {Key: "createdAt", Value: -1}}, }, { Keys: bson.D{{Key: "districtCode", Value: 1}, {Key: "createdAt", Value: -1}}, }, { Keys: bson.D{{Key: "passAt", Value: -1}}, }, { Keys: bson.D{{Key: "refussAt", Value: -1}}, }, { Keys: bson.D{{Key: "optTypeAt", Value: -1}}, }, { 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)) } } // InsertOne 增加广告 func InsertOne(t *db.MongoTool, doc InsertDoc) error { if doc.CreatedAt.IsZero() { doc.CreatedAt = time.Now() } if doc.ApplyAt.IsZero() { doc.ApplyAt = time.Now() } if _, err := coll(t).InsertOne(doc); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertOne", table, "InsertMany", err)) return err } return nil } var processong = Processong func updateOne(doc UpdateDoc, mats ...Matcher) error { var d struct { Doc UpdateDoc `bson:",inline"` ReviewStatus *ReviewStatus `bson:"reviewStatus,omitempty"` //审核状态 } d.Doc = doc filter := pageopt.MergeM(mats) now := time.Now() if doc.OptType != nil { doc.ApplyAt = &now } if doc.Title != nil || doc.Cover != nil || doc.HrefType != nil || doc.Href != nil || doc.Position != nil || doc.SortCode != nil { d.ReviewStatus = &processong } if doc.UpdatedAt.IsZero() { doc.UpdatedAt = now } res, err := coll(nil).UpdateOne(filter, bson.M{"$set": d}) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateAds", table, "UpdateOne", err), log.Any("doc", doc), log.Any("filter", filter)) return err } if res.MatchedCount == 0 { return ADReviewNotExistError{} } return nil } func UpdateOneByID(id ObjectID, doc UpdateDoc) error { return updateOne(doc, (&IDMatch{ID: &id}).New()) } func DeleteOne(t *db.MongoTool, id ObjectID) error { if _, err := coll(t).DeleteById(id); err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "DeleteOne", table, "DeleteById", err)) if err == mongo.ErrNoDocuments { return ADReviewNotExistError{} } return err } return nil } func updateReview(review Review, now time.Time, mats ...Matcher) error { var doc struct { Review `bson:",inline"` UpdatedAt time.Time `bson:"updatedAt"` //更新时间 } doc.Review = review if doc.ReviewStatus == Pass { doc.PassAt = now } if doc.ReviewStatus == Refuse { doc.RefussAt = now } doc.UpdatedAt = now filter := pageopt.MergeM(mats) res, err := coll(nil).UpdateOne(filter, bson.M{"$set": doc}) if err != nil { log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdateAds", table, "UpdateOne", err), log.Any("doc", doc), log.Any("filter", filter)) return err } if res.MatchedCount == 0 { return ADReviewNotExistError{} } return nil } func UpdateReviewByID(id ObjectID, curStatus ReviewStatus, targetStatus ReviewStatus, adID *ObjectID, reviewer string, receiptInfo string, now time.Time) error { review := Review{ Reviewer: reviewer, ReviewStatus: targetStatus, ReceiptInfo: receiptInfo, } if adID != nil { review.ADID = *adID } mats := []Matcher{ (&IDMatch{ID: &id}).New(), (&ReviewStatusMatch{&curStatus}).New(), } return updateReview(review, now, mats...) } func findOne(mats ...Matcher) (AdReview, error) { filter := pageopt.MergeM(mats) ads := AdReview{} if err := coll(nil).FindOne(&ads, filter); err != nil { return AdReview{}, err } if ads.ID.IsZero() { return AdReview{}, ADReviewNotExistError{} } return ads, nil } func FindOneByID(id ObjectID) (AdReview, error) { return findOne((&IDMatch{ID: &id}).New()) }