notifier/internal/repository/repository.go
2024-11-25 11:14:01 +03:00

95 lines
2.0 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"
"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
}