package mail import ( "context" "go_dreamfactory/comm" "go_dreamfactory/modules" "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" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/x/bsonx" ) type modelMail struct { modules.MCompModel } func (this *modelMail) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = comm.TableMail this.MCompModel.Init(service, module, comp, options) //创建uid索引 this.DB.CreateIndex(core.SqlTable(comm.TableMail), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) return } func (this *modelMail) MailQueryUserMail(uId string) (mail []*pb.DBMailData, err error) { if _data, err := this.DB.Find(comm.TableMail, bson.M{"uid": uId}, options.Find().SetSort(bson.M{"createtime": -1})); err == nil { for _data.Next(context.TODO()) { temp := &pb.DBMailData{} if err = _data.Decode(temp); err == nil { mail = append(mail, temp) } } } return } // 插入一封新的邮件 func (this *modelMail) MailInsertUserMail(mail *pb.DBMailData) (err error) { mail.ObjId = primitive.NewObjectID().Hex() mail.Check = false mail.Reward = false if len(mail.GetItems()) > 0 { mail.Reward = false } _, err = this.DB.InsertOne(comm.TableMail, mail) return err } func (this *modelMail) MailReadOneMail(objId string) (mail *pb.DBMailData, err error) { err = this.DB.FindOneAndUpdate( comm.TableMail, bson.M{"_id": objId}, bson.M{"$set": bson.M{ "check": true, }}, options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After), ).Decode(&mail) return mail, err } // 查询附件信息 func (this *modelMail) MailGetMailAttachment(objId string) (itmes []*pb.UserAssets, err error) { var nd *pb.DBMailData err = this.DB.FindOne(comm.TableMail, bson.M{"_id": objId}).Decode(&nd) if err == nil { itmes = nd.GetItems() } return itmes, err } // 查看领取附件状态 func (this *modelMail) MailGetMailAttachmentState(objId string) (*pb.DBMailData, error) { var nd *pb.DBMailData err := this.DB.FindOne(comm.TableMail, bson.M{"_id": objId}).Decode(&nd) return nd, err //return !nd.Reward && len(nd.GetItems()) > 0 && nd.Uid == uid } // 更新领取附件状态 func (this *modelMail) MailUpdateMailAttachmentState(objId string) bool { this.DB.FindOneAndUpdate( comm.TableMail, bson.M{"_id": objId}, bson.M{"$set": bson.M{ "reward": true, "check": true, }}, options.FindOneAndUpdate().SetUpsert(false).SetReturnDocument(options.After), ) return true } // 删除一封邮件 func (this *modelMail) MailDelUserMail(objId string) bool { var obj *pb.DBMailData err := this.DB.FindOne(comm.TableMail, bson.M{"_id": objId}).Decode(&obj) if err != nil { return false } this.DB.DeleteOne(comm.TableMail, bson.M{"_id": objId}) return true } func (this *modelMail) MailQueryUserMailByReard(uId string) (mail []*pb.DBMailData, err error) { if _data, err := this.DB.Find(comm.TableMail, bson.M{"uid": uId, "reward": false}); err == nil { for _data.Next(context.TODO()) { temp := &pb.DBMailData{} if err = _data.Decode(temp); err == nil { mail = append(mail, temp) } } } return }