From 647cc1d9bf60d500fe103f0457b84524d509aebb Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Sun, 17 Jul 2022 11:01:47 +0530 Subject: [PATCH] feat: add email template implementation for mongodb provider --- server/db/providers/mongodb/email_template.go | 77 +++++++++++++++++-- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/server/db/providers/mongodb/email_template.go b/server/db/providers/mongodb/email_template.go index 2f29f42..0a0d1d9 100644 --- a/server/db/providers/mongodb/email_template.go +++ b/server/db/providers/mongodb/email_template.go @@ -7,6 +7,8 @@ import ( "github.com/authorizerdev/authorizer/server/db/models" "github.com/authorizerdev/authorizer/server/graph/model" "github.com/google/uuid" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" ) // AddEmailTemplate to add EmailTemplate @@ -18,31 +20,96 @@ func (p *provider) AddEmailTemplate(ctx context.Context, emailTemplate models.Em emailTemplate.Key = emailTemplate.ID emailTemplate.CreatedAt = time.Now().Unix() emailTemplate.UpdatedAt = time.Now().Unix() + + emailTemplateCollection := p.db.Collection(models.Collections.EmailTemplate, options.Collection()) + _, err := emailTemplateCollection.InsertOne(ctx, emailTemplate) + if err != nil { + return nil, err + } return emailTemplate.AsAPIEmailTemplate(), nil } // UpdateEmailTemplate to update EmailTemplate func (p *provider) UpdateEmailTemplate(ctx context.Context, emailTemplate models.EmailTemplate) (*model.EmailTemplate, error) { emailTemplate.UpdatedAt = time.Now().Unix() + + emailTemplateCollection := p.db.Collection(models.Collections.EmailTemplate, options.Collection()) + _, err := emailTemplateCollection.UpdateOne(ctx, bson.M{"_id": bson.M{"$eq": emailTemplate.ID}}, bson.M{"$set": emailTemplate}, options.MergeUpdateOptions()) + if err != nil { + return nil, err + } + return emailTemplate.AsAPIEmailTemplate(), nil } // ListEmailTemplates to list EmailTemplate func (p *provider) ListEmailTemplate(ctx context.Context, pagination model.Pagination) (*model.EmailTemplates, error) { - return nil, nil + var emailTemplates []*model.EmailTemplate + opts := options.Find() + opts.SetLimit(pagination.Limit) + opts.SetSkip(pagination.Offset) + opts.SetSort(bson.M{"created_at": -1}) + + paginationClone := pagination + + emailTemplateCollection := p.db.Collection(models.Collections.EmailTemplate, options.Collection()) + count, err := emailTemplateCollection.CountDocuments(ctx, bson.M{}, options.Count()) + if err != nil { + return nil, err + } + + paginationClone.Total = count + + cursor, err := emailTemplateCollection.Find(ctx, bson.M{}, opts) + if err != nil { + return nil, err + } + defer cursor.Close(ctx) + + for cursor.Next(ctx) { + var emailTemplate models.EmailTemplate + err := cursor.Decode(&emailTemplate) + if err != nil { + return nil, err + } + emailTemplates = append(emailTemplates, emailTemplate.AsAPIEmailTemplate()) + } + + return &model.EmailTemplates{ + Pagination: &paginationClone, + EmailTemplates: emailTemplates, + }, nil } // GetEmailTemplateByID to get EmailTemplate by id -func (p *provider) GetEmailTemplateByID(ctx context.Context, EmailTemplateID string) (*model.EmailTemplate, error) { - return nil, nil +func (p *provider) GetEmailTemplateByID(ctx context.Context, emailTemplateID string) (*model.EmailTemplate, error) { + var emailTemplate models.EmailTemplate + emailTemplateCollection := p.db.Collection(models.Collections.EmailTemplate, options.Collection()) + err := emailTemplateCollection.FindOne(ctx, bson.M{"_id": emailTemplateID}).Decode(&emailTemplate) + if err != nil { + return nil, err + } + return emailTemplate.AsAPIEmailTemplate(), nil } // GetEmailTemplateByEventName to get EmailTemplate by event_name func (p *provider) GetEmailTemplateByEventName(ctx context.Context, eventName string) (*model.EmailTemplate, error) { - return nil, nil + var emailTemplate models.EmailTemplate + emailTemplateCollection := p.db.Collection(models.Collections.EmailTemplate, options.Collection()) + err := emailTemplateCollection.FindOne(ctx, bson.M{"event_name": eventName}).Decode(&emailTemplate) + if err != nil { + return nil, err + } + return emailTemplate.AsAPIEmailTemplate(), nil } // DeleteEmailTemplate to delete EmailTemplate -func (p *provider) DeleteEmailTemplate(ctx context.Context, EmailTemplate *model.EmailTemplate) error { +func (p *provider) DeleteEmailTemplate(ctx context.Context, emailTemplate *model.EmailTemplate) error { + emailTemplateCollection := p.db.Collection(models.Collections.EmailTemplate, options.Collection()) + _, err := emailTemplateCollection.DeleteOne(nil, bson.M{"_id": emailTemplate.ID}, options.Delete()) + if err != nil { + return err + } + return nil }