package repository import ( "context" "errors" "gitea.pena/PenaSide/notifier/internal/models" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "time" ) type Repository struct { mdb *mongo.Collection //welcomeChan chan models.Message } func NewRepository(mdb *mongo.Collection) *Repository { return &Repository{ mdb: mdb, } } // записываем каждый месседж по одному func (r *Repository) Insert(ctx context.Context, mes models.Message) error { mes.ID = primitive.NewObjectID() _, err := r.mdb.InsertOne(ctx, mes) if err != nil { return err } //r.welcomeChan <- mes return nil } // получаем сразу все в tools метод распределения func (r *Repository) GetMany(ctx context.Context) ([]models.Message, error) { to := time.Now().AddDate(0, 0, -15) from := time.Now().AddDate(0, 0, -7) filter := bson.D{ {Key: "$and", Value: bson.A{ bson.D{ {Key: "$or", Value: bson.A{ bson.D{{Key: "sendRegistration", Value: false}}, bson.D{{Key: "sendNoneCreated", Value: false}}, bson.D{{Key: "sendUnpublished", Value: false}}, }}, }, bson.D{ {Key: "sendAt", Value: bson.D{ {Key: "$gte", Value: to}, {Key: "$lte", Value: from}, }}, }, }}, } cursor, err := r.mdb.Find(ctx, filter) if err != nil { if errors.Is(err, mongo.ErrNoDocuments) { return []models.Message{}, nil } return nil, err } defer cursor.Close(ctx) var messages []models.Message if err := cursor.All(ctx, &messages); err != nil { return nil, err } return messages, nil } // апдейтим то что отправили на почту func (r *Repository) Update(ctx context.Context, message models.Message) error { filter := bson.M{"_id": message.ID} update := bson.M{ "$set": bson.M{ "sendRegistration": message.SendRegistration, "sendNoneCreated": message.SendNoneCreated, "sendUnpublished": message.SendUnpublished, "sendPaid": message.SendPaid, }, } _, err := r.mdb.UpdateOne(ctx, filter, update) if err != nil { return err } return nil }