From 3d6bfe4480e76650d0463ca094d8889c705c88ce Mon Sep 17 00:00:00 2001 From: Mussie Teshome Date: Sun, 11 Jun 2023 15:56:02 +0300 Subject: [PATCH] mongo implementation for the sms crud --- .../mongodb/sms_verification_requests.go | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 server/db/providers/mongodb/sms_verification_requests.go diff --git a/server/db/providers/mongodb/sms_verification_requests.go b/server/db/providers/mongodb/sms_verification_requests.go new file mode 100644 index 0000000..b2d3a13 --- /dev/null +++ b/server/db/providers/mongodb/sms_verification_requests.go @@ -0,0 +1,69 @@ +package mongodb + +import ( + "context" + "time" + + "github.com/authorizerdev/authorizer/server/db/models" + "github.com/google/uuid" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" +) + +// SMS verification Request +func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { + smsVerificationRequest, _ := p.GetCodeByPhone(ctx, smsRequest.PhoneNumber) + shouldCreate := false + + if smsVerificationRequest == nil { + id := uuid.NewString() + + smsVerificationRequest = &models.SMSVerificationRequest{ + ID: id, + CreatedAt: time.Now().Unix(), + Code: smsRequest.Code, + PhoneNumber: smsRequest.PhoneNumber, + CodeExpiresAt: smsRequest.CodeExpiresAt, + } + shouldCreate = true + } + + smsVerificationRequest.UpdatedAt = time.Now().Unix() + smsRequestCollection := p.db.Collection(models.Collections.SMSVerificationRequest, options.Collection()) + + var err error + if shouldCreate { + _, err = smsRequestCollection.InsertOne(ctx, smsVerificationRequest) + } else { + _, err = smsRequestCollection.UpdateOne(ctx, bson.M{"phone_number": bson.M{"$eq": smsRequest.PhoneNumber}}, bson.M{"$set": smsVerificationRequest}, options.MergeUpdateOptions()) + } + + if err != nil { + return nil, err + } + + return smsVerificationRequest, nil +} + +func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { + var smsVerificationRequest models.SMSVerificationRequest + + smsRequestCollection := p.db.Collection(models.Collections.SMSVerificationRequest, options.Collection()) + err := smsRequestCollection.FindOne(ctx, bson.M{"phone_number": phoneNumber}).Decode(&smsVerificationRequest) + + if err != nil { + return nil, err + } + + return &smsVerificationRequest, nil +} + +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { + smsVerificationRequests := p.db.Collection(models.Collections.SMSVerificationRequest, options.Collection()) + _, err := smsVerificationRequests.DeleteOne(nil, bson.M{"_id": smsRequest.ID}, options.Delete()) + if err != nil { + return err + } + + return nil +}