package repository import ( "context" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "mailnotifier/internal/models" ) type Repository struct { mdb *mongo.Collection welcomeChan chan models.Message } func NewRepository(mdb *mongo.Collection, welcomeChan chan models.Message) *Repository { return &Repository{ mdb: mdb, welcomeChan: welcomeChan, } } // записываем каждый месседж по одному 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) { cursor, err := r.mdb.Find(ctx, bson.D{}) if err != 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 }