45 lines
843 B
Go
45 lines
843 B
Go
package repository
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"smpp-otp/pkg/lib/logger"
|
|
"time"
|
|
|
|
"github.com/go-redis/redis"
|
|
)
|
|
|
|
type OTPRepository struct {
|
|
Client *redis.Client
|
|
logger *logger.Loggers
|
|
}
|
|
|
|
func NewOTPRepository(client *redis.Client, logger *logger.Loggers) *OTPRepository {
|
|
return &OTPRepository{
|
|
Client: client,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func GenerateOTP() string {
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
otp := fmt.Sprintf("%06d", r.Intn(1000000))
|
|
return otp
|
|
}
|
|
|
|
func (r *OTPRepository) SaveOTP(phoneNumber string, otp string) error {
|
|
err := r.Client.Watch(func(tx *redis.Tx) error {
|
|
err := tx.Set(phoneNumber, otp, 0).Err()
|
|
if err != nil {
|
|
r.logger.ErrorLogger.Error("Error setting up values into redis: %v", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}, phoneNumber)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|