feat: implement resolvers for email template

This commit is contained in:
Lakhan Samani
2022-07-17 12:32:01 +05:30
parent 50f52a99b4
commit cd46da60a0
9 changed files with 220 additions and 11 deletions

View File

@@ -1 +1,53 @@
package resolvers
import (
"context"
"fmt"
"strings"
"github.com/authorizerdev/authorizer/server/db"
"github.com/authorizerdev/authorizer/server/db/models"
"github.com/authorizerdev/authorizer/server/graph/model"
"github.com/authorizerdev/authorizer/server/token"
"github.com/authorizerdev/authorizer/server/utils"
"github.com/authorizerdev/authorizer/server/validators"
log "github.com/sirupsen/logrus"
)
// TODO add template validator
// AddEmailTemplateResolver resolver for add email template mutation
func AddEmailTemplateResolver(ctx context.Context, params model.AddEmailTemplateRequest) (*model.Response, error) {
gc, err := utils.GinContextFromContext(ctx)
if err != nil {
log.Debug("Failed to get GinContext: ", err)
return nil, err
}
if !token.IsSuperAdmin(gc) {
log.Debug("Not logged in as super admin")
return nil, fmt.Errorf("unauthorized")
}
if !validators.IsValidEmailTemplateEventName(params.EventName) {
log.Debug("Invalid Event Name: ", params.EventName)
return nil, fmt.Errorf("invalid event name %s", params.EventName)
}
if strings.TrimSpace(params.Template) == "" {
return nil, fmt.Errorf("empty template not allowed")
}
_, err = db.Provider.AddEmailTemplate(ctx, models.EmailTemplate{
EventName: params.EventName,
Template: params.Template,
})
if err != nil {
log.Debug("Failed to add email template: ", err)
return nil, err
}
return &model.Response{
Message: `Email template added successfully`,
}, nil
}

View File

@@ -1 +1,49 @@
package resolvers
import (
"context"
"fmt"
"github.com/authorizerdev/authorizer/server/db"
"github.com/authorizerdev/authorizer/server/graph/model"
"github.com/authorizerdev/authorizer/server/token"
"github.com/authorizerdev/authorizer/server/utils"
log "github.com/sirupsen/logrus"
)
// DeleteEmailTemplateResolver resolver to delete email template and its relevant logs
func DeleteEmailTemplateResolver(ctx context.Context, params model.DeleteEmailTemplateRequest) (*model.Response, error) {
gc, err := utils.GinContextFromContext(ctx)
if err != nil {
log.Debug("Failed to get GinContext: ", err)
return nil, err
}
if !token.IsSuperAdmin(gc) {
log.Debug("Not logged in as super admin")
return nil, fmt.Errorf("unauthorized")
}
if params.ID == "" {
log.Debug("email template is required")
return nil, fmt.Errorf("email template ID required")
}
log := log.WithField("email_template_id", params.ID)
emailTemplate, err := db.Provider.GetEmailTemplateByID(ctx, params.ID)
if err != nil {
log.Debug("failed to get email template: ", err)
return nil, err
}
err = db.Provider.DeleteEmailTemplate(ctx, emailTemplate)
if err != nil {
log.Debug("failed to delete email template: ", err)
return nil, err
}
return &model.Response{
Message: "Email templated deleted successfully",
}, nil
}

View File

@@ -1 +1,35 @@
package resolvers
import (
"context"
"fmt"
"github.com/authorizerdev/authorizer/server/db"
"github.com/authorizerdev/authorizer/server/graph/model"
"github.com/authorizerdev/authorizer/server/token"
"github.com/authorizerdev/authorizer/server/utils"
log "github.com/sirupsen/logrus"
)
// EmailTemplatesResolver resolver for getting the list of email templates based on pagination
func EmailTemplatesResolver(ctx context.Context, params *model.PaginatedInput) (*model.EmailTemplates, error) {
gc, err := utils.GinContextFromContext(ctx)
if err != nil {
log.Debug("Failed to get GinContext: ", err)
return nil, err
}
if !token.IsSuperAdmin(gc) {
log.Debug("Not logged in as super admin")
return nil, fmt.Errorf("unauthorized")
}
pagination := utils.GetPagination(params)
emailTemplates, err := db.Provider.ListEmailTemplate(ctx, pagination)
if err != nil {
log.Debug("failed to get email templates: ", err)
return nil, err
}
return emailTemplates, nil
}

View File

@@ -1 +1,63 @@
package resolvers
import (
"context"
"fmt"
"github.com/authorizerdev/authorizer/server/db"
"github.com/authorizerdev/authorizer/server/db/models"
"github.com/authorizerdev/authorizer/server/graph/model"
"github.com/authorizerdev/authorizer/server/refs"
"github.com/authorizerdev/authorizer/server/token"
"github.com/authorizerdev/authorizer/server/utils"
"github.com/authorizerdev/authorizer/server/validators"
log "github.com/sirupsen/logrus"
)
// UpdateEmailTemplateResolver resolver for update email template mutation
func UpdateEmailTemplateResolver(ctx context.Context, params model.UpdateEmailTemplateRequest) (*model.Response, error) {
gc, err := utils.GinContextFromContext(ctx)
if err != nil {
log.Debug("Failed to get GinContext: ", err)
return nil, err
}
if !token.IsSuperAdmin(gc) {
log.Debug("Not logged in as super admin")
return nil, fmt.Errorf("unauthorized")
}
emailTemplate, err := db.Provider.GetEmailTemplateByID(ctx, params.ID)
if err != nil {
log.Debug("failed to get email template: ", err)
return nil, err
}
emailTemplateDetails := models.EmailTemplate{
ID: emailTemplate.ID,
Key: emailTemplate.ID,
EventName: emailTemplate.EventName,
CreatedAt: refs.Int64Value(emailTemplate.CreatedAt),
}
if params.EventName != nil && emailTemplateDetails.EventName != refs.StringValue(params.EventName) {
if isValid := validators.IsValidEmailTemplateEventName(refs.StringValue(params.EventName)); !isValid {
log.Debug("invalid event name: ", refs.StringValue(params.EventName))
return nil, fmt.Errorf("invalid event name %s", refs.StringValue(params.EventName))
}
emailTemplateDetails.EventName = refs.StringValue(params.EventName)
}
if params.Template != nil && emailTemplateDetails.Template != refs.StringValue(params.Template) {
emailTemplateDetails.Template = refs.StringValue(params.Template)
}
_, err = db.Provider.UpdateEmailTemplate(ctx, emailTemplateDetails)
if err != nil {
return nil, err
}
return &model.Response{
Message: `Email template updated successfully.`,
}, nil
}

View File

@@ -50,7 +50,7 @@ func UpdateWebhookResolver(ctx context.Context, params model.UpdateWebhookReques
EndPoint: refs.StringValue(webhook.Endpoint),
Enabled: refs.BoolValue(webhook.Enabled),
Headers: headersString,
CreatedAt: *webhook.CreatedAt,
CreatedAt: refs.Int64Value(webhook.CreatedAt),
}
if params.EventName != nil && webhookDetails.EventName != refs.StringValue(params.EventName) {
@@ -62,7 +62,7 @@ func UpdateWebhookResolver(ctx context.Context, params model.UpdateWebhookReques
}
if params.Endpoint != nil && webhookDetails.EndPoint != refs.StringValue(params.Endpoint) {
webhookDetails.EventName = refs.StringValue(params.EventName)
webhookDetails.EndPoint = refs.StringValue(params.Endpoint)
}
if params.Enabled != nil && webhookDetails.Enabled != refs.BoolValue(params.Enabled) {

View File

@@ -28,7 +28,7 @@ func WebhooksResolver(ctx context.Context, params *model.PaginatedInput) (*model
webhooks, err := db.Provider.ListWebhook(ctx, pagination)
if err != nil {
log.Debug("failed to get webhook logs: ", err)
log.Debug("failed to get webhooks: ", err)
return nil, err
}
return webhooks, nil