Newer
Older
package storage
import (
"context"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
)
type Subscriber struct {
ID primitive.ObjectID `bson:"_id"`
Name string
WebhookURL string
PolicyName string
PolicyGroup string
PolicyVersion string
CreatedAt time.Time
UpdatedAt time.Time
}
func (s *Storage) CreateSubscriber(ctx context.Context, subscriber *Subscriber) (*Subscriber, error) {
_, err := s.policyExist(ctx, subscriber.PolicyName, subscriber.PolicyGroup, subscriber.PolicyVersion)
if err != nil {
subscriberExist, err := s.subscriberExist(ctx, subscriber)
if err != nil {
return nil, err
}
if subscriberExist {
return nil, fmt.Errorf("subscriber already exists")
}
subscriber.CreatedAt = time.Now()
subscriber.UpdatedAt = time.Now()
subscriber.ID = primitive.NewObjectID()
_, err = s.subscriber.InsertOne(ctx, subscriber)
if err != nil {
return nil, err
func (s *Storage) PolicyChangeSubscribers(ctx context.Context, policyName, policyGroup, policyVersion string) ([]*Subscriber, error) {
cursor, err := s.subscriber.Find(ctx, bson.M{
"policyname": policyName,
"policygroup": policyGroup,
"policyversion": policyVersion,
})
if err != nil {
return nil, err
}
subscribers := []*Subscriber{}
if err := cursor.All(ctx, &subscribers); err != nil {
return nil, err
}
return subscribers, nil
}
func (s *Storage) subscriberExist(ctx context.Context, subscriber *Subscriber) (bool, error) {
err := s.subscriber.FindOne(ctx, bson.M{
"name": subscriber.Name,
"webhookurl": subscriber.WebhookURL,
"policyname": subscriber.PolicyName,
"policygroup": subscriber.PolicyGroup,
"policyversion": subscriber.PolicyVersion,
}).Err()
if err != nil {
if errors.Is(err, mongo.ErrNoDocuments) {
return false, nil
}
return false, err
}
return true, nil
}
func (s *Storage) policyExist(ctx context.Context, name, group, version string) (bool, error) {