diff --git a/server/db/providers/mongodb/otp.go b/server/db/providers/mongodb/otp.go index 20e8aae..715b02b 100644 --- a/server/db/providers/mongodb/otp.go +++ b/server/db/providers/mongodb/otp.go @@ -6,6 +6,8 @@ import ( "github.com/authorizerdev/authorizer/server/db/models" "github.com/google/uuid" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" ) // AddOTP to add otp @@ -18,21 +20,48 @@ func (p *provider) AddOTP(ctx context.Context, otp *models.OTP) (*models.OTP, er otp.CreatedAt = time.Now().Unix() otp.UpdatedAt = time.Now().Unix() + otpCollection := p.db.Collection(models.Collections.OTP, options.Collection()) + _, err := otpCollection.InsertOne(ctx, otp) + if err != nil { + return nil, err + } + return otp, nil } // UpdateOTP to update otp for a given email address func (p *provider) UpdateOTP(ctx context.Context, otp *models.OTP) (*models.OTP, error) { otp.UpdatedAt = time.Now().Unix() + + otpCollection := p.db.Collection(models.Collections.OTP, options.Collection()) + _, err := otpCollection.UpdateOne(ctx, bson.M{"_id": bson.M{"$eq": otp.ID}}, bson.M{"$set": otp}, options.MergeUpdateOptions()) + if err != nil { + return nil, err + } + return otp, 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 + var otp *models.OTP + + otpCollection := p.db.Collection(models.Collections.OTP, options.Collection()) + err := otpCollection.FindOne(ctx, bson.M{"email": emailAddress}).Decode(otp) + if err != nil { + return nil, err + } + + return otp, nil } // DeleteOTP to delete otp func (p *provider) DeleteOTP(ctx context.Context, otp *models.OTP) error { + otpCollection := p.db.Collection(models.Collections.OTP, options.Collection()) + _, err := otpCollection.DeleteOne(nil, bson.M{"_id": otp.ID}, options.Delete()) + if err != nil { + return err + } + return nil } diff --git a/server/db/providers/mongodb/provider.go b/server/db/providers/mongodb/provider.go index dd79284..7a969a9 100644 --- a/server/db/providers/mongodb/provider.go +++ b/server/db/providers/mongodb/provider.go @@ -110,6 +110,15 @@ func NewProvider() (*provider, error) { }, }, options.CreateIndexes()) + mongodb.CreateCollection(ctx, models.Collections.OTP, options.CreateCollection()) + otpCollection := mongodb.Collection(models.Collections.OTP, options.Collection()) + otpCollection.Indexes().CreateMany(ctx, []mongo.IndexModel{ + { + Keys: bson.M{"email": 1}, + Options: options.Index().SetUnique(true).SetSparse(true), + }, + }, options.CreateIndexes()) + return &provider{ db: mongodb, }, nil diff --git a/server/db/providers/sql/otp.go b/server/db/providers/sql/otp.go index 164a87d..c83394b 100644 --- a/server/db/providers/sql/otp.go +++ b/server/db/providers/sql/otp.go @@ -39,13 +39,13 @@ func (p *provider) UpdateOTP(ctx context.Context, otp *models.OTP) (*models.OTP, // GetOTPByEmail to get otp for a given email address func (p *provider) GetOTPByEmail(ctx context.Context, emailAddress string) (*models.OTP, error) { - var otp models.OTP + var otp *models.OTP - result := p.db.Where("email = ?", emailAddress).First(&otp) + result := p.db.Where("email = ?", emailAddress).First(otp) if result.Error != nil { return nil, result.Error } - return &otp, nil + return otp, nil } // DeleteOTP to delete otp