package db import ( "context" "go_dreamfactory/pb" "go_dreamfactory/lego/core" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" ) const ( DB_MailTable core.SqlTable = "mail" ) type IMail interface { Mail_QueryUserMail(uId string) (mail []*pb.DB_MailData, err error) Mail_InsertUserMail(mail *pb.DB_MailData) (err error) Mail_ReadOneMail(objId string) (mail *pb.DB_MailData, err error) Mail_GetMailAttachment(objId string) (itmes []*pb.MailAttachment, err error) Mail_GetMailAttachmentState(objId string) bool Mail_UpdateMailAttachmentState(objId string) bool Mail_DelUserMail(objId string) bool } func (this *DB) Mail_QueryUserMail(uId string) (mail []*pb.DB_MailData, err error) { if _data, err := this.mgo.Find(DB_MailTable, bson.M{"userid": uId}); err == nil { for _data.Next(context.TODO()) { temp := &pb.DB_MailData{} if err = _data.Decode(temp); err == nil { mail = append(mail, temp) } } } return } // 插入一封新的邮件 func (this *DB) Mail_InsertUserMail(mail *pb.DB_MailData) (err error) { mail.ObjId = primitive.NewObjectID().Hex() mail.Check = false mail.Reward = false if len(mail.GetItems()) > 0 { mail.Reward = true } _, err = this.mgo.InsertOne(DB_MailTable, mail) return err } func (this *DB) Mail_ReadOneMail(objId string) (mail *pb.DB_MailData, err error) { err = this.mgo.FindOneAndUpdate( DB_MailTable, bson.M{"_id": objId}, bson.M{"$set": bson.M{ "check": false, }}, options.FindOneAndUpdate().SetUpsert(false).SetReturnDocument(options.After), ).Decode(mail) return mail, err } // 查询附件信息 func (this *DB) Mail_GetMailAttachment(objId string) (itmes []*pb.MailAttachment, err error) { obj := this.mgo.FindOne(DB_MailTable, bson.M{"_id": objId}) var nd *pb.DB_MailData err = obj.Decode(&nd) itmes = nd.GetItems() return itmes, err } // 查看领取附件状态 func (this *DB) Mail_GetMailAttachmentState(objId string) bool { var nd *pb.DB_MailData err := this.mgo.FindOne(DB_MailTable, bson.M{"_id": objId}).Decode(nd) if err != nil { return false } return nd.Reward && len(nd.GetItems()) > 0 } // 更新领取附件状态 func (this *DB) Mail_UpdateMailAttachmentState(objId string) bool { this.mgo.FindOneAndUpdate( DB_MailTable, bson.M{"_id": objId}, bson.M{"$set": bson.M{ "reward": true, }}, options.FindOneAndUpdate().SetUpsert(false).SetReturnDocument(options.After), ) return true } // 删除一封邮件 func (this *DB) Mail_DelUserMail(objId string) bool { var obj *pb.DB_MailData err := this.mgo.FindOne(DB_MailTable, bson.M{"_id": objId}).Decode(obj) if err != nil { return false } this.mgo.DeleteOne(DB_MailTable, bson.M{"_id": objId}) return true }