package repository import ( "context" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "gitea.pena/PenaSide/notifier/internal/models" "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{ {"$and", bson.A{ bson.D{ {"$or", bson.A{ bson.D{{"sendRegistration", false}}, bson.D{{"sendNoneCreated", false}}, bson.D{{"sendUnpublished", false}}, }}, }, bson.D{ {"sendAt", bson.D{ {"$gte", to}, {"$lte", from}, }}, }, }}, } cursor, err := r.mdb.Find(ctx, filter) if err != nil { if 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 }