notifier/internal/repository/repository.go
2024-04-02 17:46:05 +03:00

71 lines
1.6 KiB
Go

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
}