go_dreamfactory/sys/db/mail.go

109 lines
2.5 KiB
Go

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 {
QueryUserMail(uId string) (mail []*pb.DB_MailData, err error)
InsertUserMail(mail *pb.DB_MailData) (err error)
ReadOneMail(objId string) (mail *pb.DB_MailData, err error)
GetMailAttachment(objId string) (itmes []*pb.MailAttachment, err error)
GetMailAttachmentState(objId string) bool
UpdateMailAttachmentState(objId string) bool
DelUserMail(objId string) bool
}
func (this *DB) 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) InsertUserMail(mail *pb.DB_MailData) (err error) {
mail.ObjId = primitive.NewObjectID().Hex()
mail.Check = false
_, err = this.mgo.InsertOne(DB_MailTable, mail)
return err
}
func (this *DB) 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) 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) 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) 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) 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
}