From a366b2811ddd2c8621ae5b321c72b781b6a6fc45 Mon Sep 17 00:00:00 2001 From: Lakhan Samani Date: Thu, 24 Nov 2022 19:08:17 +0530 Subject: [PATCH] feat: implement base for surreal db --- server/constants/db_types.go | 2 + .../db/providers/surrealdb/email_template.go | 48 +++++++++++++ server/db/providers/surrealdb/env.go | 33 +++++++++ server/db/providers/surrealdb/otp.go | 22 ++++++ server/db/providers/surrealdb/provider.go | 20 ++++++ server/db/providers/surrealdb/session.go | 25 +++++++ server/db/providers/surrealdb/user.go | 71 +++++++++++++++++++ .../surrealdb/verification_requests.go | 46 ++++++++++++ server/db/providers/surrealdb/webhook.go | 49 +++++++++++++ server/db/providers/surrealdb/webhook_log.go | 27 +++++++ 10 files changed, 343 insertions(+) create mode 100644 server/db/providers/surrealdb/email_template.go create mode 100644 server/db/providers/surrealdb/env.go create mode 100644 server/db/providers/surrealdb/otp.go create mode 100644 server/db/providers/surrealdb/provider.go create mode 100644 server/db/providers/surrealdb/session.go create mode 100644 server/db/providers/surrealdb/user.go create mode 100644 server/db/providers/surrealdb/verification_requests.go create mode 100644 server/db/providers/surrealdb/webhook.go create mode 100644 server/db/providers/surrealdb/webhook_log.go diff --git a/server/constants/db_types.go b/server/constants/db_types.go index ead7fc6..e9ae931 100644 --- a/server/constants/db_types.go +++ b/server/constants/db_types.go @@ -27,4 +27,6 @@ const ( DbTypePlanetScaleDB = "planetscale" // DbTypeDynamoDB is the Dynamo database type DbTypeDynamoDB = "dynamodb" + // DbTypeSurrealDB is the SurrealDB database type + DbTypeSurrealDB = "surrealdb" ) diff --git a/server/db/providers/surrealdb/email_template.go b/server/db/providers/surrealdb/email_template.go new file mode 100644 index 0000000..8175a81 --- /dev/null +++ b/server/db/providers/surrealdb/email_template.go @@ -0,0 +1,48 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/google/uuid" +) + +// AddEmailTemplate to add EmailTemplate +func (p *provider) AddEmailTemplate(ctx context.Context, emailTemplate models.EmailTemplate) (*model.EmailTemplate, error) { + if emailTemplate.ID == "" { + emailTemplate.ID = uuid.New().String() + } + + emailTemplate.Key = emailTemplate.ID + emailTemplate.CreatedAt = time.Now().Unix() + emailTemplate.UpdatedAt = time.Now().Unix() + 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() + return emailTemplate.AsAPIEmailTemplate(), nil +} + +// ListEmailTemplates to list EmailTemplate +func (p *provider) ListEmailTemplate(ctx context.Context, pagination model.Pagination) (*model.EmailTemplates, error) { + return nil, nil +} + +// GetEmailTemplateByID to get EmailTemplate by id +func (p *provider) GetEmailTemplateByID(ctx context.Context, emailTemplateID string) (*model.EmailTemplate, error) { + return nil, nil +} + +// GetEmailTemplateByEventName to get EmailTemplate by event_name +func (p *provider) GetEmailTemplateByEventName(ctx context.Context, eventName string) (*model.EmailTemplate, error) { + return nil, nil +} + +// DeleteEmailTemplate to delete EmailTemplate +func (p *provider) DeleteEmailTemplate(ctx context.Context, emailTemplate *model.EmailTemplate) error { + return nil +} diff --git a/server/db/providers/surrealdb/env.go b/server/db/providers/surrealdb/env.go new file mode 100644 index 0000000..8c32a78 --- /dev/null +++ b/server/db/providers/surrealdb/env.go @@ -0,0 +1,33 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/google/uuid" +) + +// AddEnv to save environment information in database +func (p *provider) AddEnv(ctx context.Context, env models.Env) (models.Env, error) { + if env.ID == "" { + env.ID = uuid.New().String() + } + + env.CreatedAt = time.Now().Unix() + env.UpdatedAt = time.Now().Unix() + return env, nil +} + +// UpdateEnv to update environment information in database +func (p *provider) UpdateEnv(ctx context.Context, env models.Env) (models.Env, error) { + env.UpdatedAt = time.Now().Unix() + return env, nil +} + +// GetEnv to get environment information from database +func (p *provider) GetEnv(ctx context.Context) (models.Env, error) { + var env models.Env + + return env, nil +} diff --git a/server/db/providers/surrealdb/otp.go b/server/db/providers/surrealdb/otp.go new file mode 100644 index 0000000..5226b11 --- /dev/null +++ b/server/db/providers/surrealdb/otp.go @@ -0,0 +1,22 @@ +package surrealdb + +import ( + "context" + + "github.com/authorizerdev/authorizer/server/db/models" +) + +// UpsertOTP to add or update otp +func (p *provider) UpsertOTP(ctx context.Context, otp *models.OTP) (*models.OTP, error) { + return nil, nil +} + +// GetOTPByEmail to get otp for a given email address +func (p *provider) GetOTPByEmail(ctx context.Context, emailAddress string) (*models.OTP, error) { + return nil, nil +} + +// DeleteOTP to delete otp +func (p *provider) DeleteOTP(ctx context.Context, otp *models.OTP) error { + return nil +} diff --git a/server/db/providers/surrealdb/provider.go b/server/db/providers/surrealdb/provider.go new file mode 100644 index 0000000..8154b1b --- /dev/null +++ b/server/db/providers/surrealdb/provider.go @@ -0,0 +1,20 @@ +package surrealdb + +import ( + "gorm.io/gorm" +) + +// TODO change following provider to new db provider +type provider struct { + db *gorm.DB +} + +// NewProvider returns a new SQL provider +// TODO change following provider to new db provider +func NewProvider() (*provider, error) { + var sqlDB *gorm.DB + + return &provider{ + db: sqlDB, + }, nil +} diff --git a/server/db/providers/surrealdb/session.go b/server/db/providers/surrealdb/session.go new file mode 100644 index 0000000..1f05d3e --- /dev/null +++ b/server/db/providers/surrealdb/session.go @@ -0,0 +1,25 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/google/uuid" +) + +// AddSession to save session information in database +func (p *provider) AddSession(ctx context.Context, session models.Session) error { + if session.ID == "" { + session.ID = uuid.New().String() + } + + session.CreatedAt = time.Now().Unix() + session.UpdatedAt = time.Now().Unix() + return nil +} + +// DeleteSession to delete session information from database +func (p *provider) DeleteSession(ctx context.Context, userId string) error { + return nil +} diff --git a/server/db/providers/surrealdb/user.go b/server/db/providers/surrealdb/user.go new file mode 100644 index 0000000..cfbac35 --- /dev/null +++ b/server/db/providers/surrealdb/user.go @@ -0,0 +1,71 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/constants" + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/memorystore" + "github.com/google/uuid" +) + +// AddUser to save user information in database +func (p *provider) AddUser(ctx context.Context, user models.User) (models.User, error) { + if user.ID == "" { + user.ID = uuid.New().String() + } + + if user.Roles == "" { + defaultRoles, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyDefaultRoles) + if err != nil { + return user, err + } + user.Roles = defaultRoles + } + + user.CreatedAt = time.Now().Unix() + user.UpdatedAt = time.Now().Unix() + + return user, nil +} + +// UpdateUser to update user information in database +func (p *provider) UpdateUser(ctx context.Context, user models.User) (models.User, error) { + user.UpdatedAt = time.Now().Unix() + return user, nil +} + +// DeleteUser to delete user information from database +func (p *provider) DeleteUser(ctx context.Context, user models.User) error { + return nil +} + +// ListUsers to get list of users from database +func (p *provider) ListUsers(ctx context.Context, pagination model.Pagination) (*model.Users, error) { + return nil, nil +} + +// GetUserByEmail to get user information from database using email address +func (p *provider) GetUserByEmail(ctx context.Context, email string) (models.User, error) { + var user models.User + + return user, nil +} + +// GetUserByID to get user information from database using user ID +func (p *provider) GetUserByID(ctx context.Context, id string) (models.User, error) { + var user models.User + + return user, nil +} + +// UpdateUsers to update multiple users, with parameters of user IDs slice +// If ids set to nil / empty all the users will be updated +func (p *provider) UpdateUsers(ctx context.Context, data map[string]interface{}, ids []string) error { + // set updated_at time for all users + data["updated_at"] = time.Now().Unix() + + return nil +} diff --git a/server/db/providers/surrealdb/verification_requests.go b/server/db/providers/surrealdb/verification_requests.go new file mode 100644 index 0000000..baf2a3a --- /dev/null +++ b/server/db/providers/surrealdb/verification_requests.go @@ -0,0 +1,46 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/google/uuid" +) + +// AddVerification to save verification request in database +func (p *provider) AddVerificationRequest(ctx context.Context, verificationRequest models.VerificationRequest) (models.VerificationRequest, error) { + if verificationRequest.ID == "" { + verificationRequest.ID = uuid.New().String() + } + + verificationRequest.CreatedAt = time.Now().Unix() + verificationRequest.UpdatedAt = time.Now().Unix() + + return verificationRequest, nil +} + +// GetVerificationRequestByToken to get verification request from database using token +func (p *provider) GetVerificationRequestByToken(ctx context.Context, token string) (models.VerificationRequest, error) { + var verificationRequest models.VerificationRequest + + return verificationRequest, nil +} + +// GetVerificationRequestByEmail to get verification request by email from database +func (p *provider) GetVerificationRequestByEmail(ctx context.Context, email string, identifier string) (models.VerificationRequest, error) { + var verificationRequest models.VerificationRequest + + return verificationRequest, nil +} + +// ListVerificationRequests to get list of verification requests from database +func (p *provider) ListVerificationRequests(ctx context.Context, pagination model.Pagination) (*model.VerificationRequests, error) { + return nil, nil +} + +// DeleteVerificationRequest to delete verification request from database +func (p *provider) DeleteVerificationRequest(ctx context.Context, verificationRequest models.VerificationRequest) error { + return nil +} diff --git a/server/db/providers/surrealdb/webhook.go b/server/db/providers/surrealdb/webhook.go new file mode 100644 index 0000000..992769f --- /dev/null +++ b/server/db/providers/surrealdb/webhook.go @@ -0,0 +1,49 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/google/uuid" +) + +// AddWebhook to add webhook +func (p *provider) AddWebhook(ctx context.Context, webhook models.Webhook) (*model.Webhook, error) { + if webhook.ID == "" { + webhook.ID = uuid.New().String() + } + + webhook.Key = webhook.ID + webhook.CreatedAt = time.Now().Unix() + webhook.UpdatedAt = time.Now().Unix() + return webhook.AsAPIWebhook(), nil +} + +// UpdateWebhook to update webhook +func (p *provider) UpdateWebhook(ctx context.Context, webhook models.Webhook) (*model.Webhook, error) { + webhook.UpdatedAt = time.Now().Unix() + return webhook.AsAPIWebhook(), nil +} + +// ListWebhooks to list webhook +func (p *provider) ListWebhook(ctx context.Context, pagination model.Pagination) (*model.Webhooks, error) { + return nil, nil +} + +// GetWebhookByID to get webhook by id +func (p *provider) GetWebhookByID(ctx context.Context, webhookID string) (*model.Webhook, error) { + return nil, nil +} + +// GetWebhookByEventName to get webhook by event_name +func (p *provider) GetWebhookByEventName(ctx context.Context, eventName string) (*model.Webhook, error) { + return nil, nil +} + +// DeleteWebhook to delete webhook +func (p *provider) DeleteWebhook(ctx context.Context, webhook *model.Webhook) error { + // Also delete webhook logs for given webhook id + return nil +} diff --git a/server/db/providers/surrealdb/webhook_log.go b/server/db/providers/surrealdb/webhook_log.go new file mode 100644 index 0000000..f964a67 --- /dev/null +++ b/server/db/providers/surrealdb/webhook_log.go @@ -0,0 +1,27 @@ +package surrealdb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/google/uuid" +) + +// AddWebhookLog to add webhook log +func (p *provider) AddWebhookLog(ctx context.Context, webhookLog models.WebhookLog) (*model.WebhookLog, error) { + if webhookLog.ID == "" { + webhookLog.ID = uuid.New().String() + } + + webhookLog.Key = webhookLog.ID + webhookLog.CreatedAt = time.Now().Unix() + webhookLog.UpdatedAt = time.Now().Unix() + return webhookLog.AsAPIWebhookLog(), nil +} + +// ListWebhookLogs to list webhook logs +func (p *provider) ListWebhookLogs(ctx context.Context, pagination model.Pagination, webhookID string) (*model.WebhookLogs, error) { + return nil, nil +}