diff --git a/internal/delivery/handlers/smpp-otp-handlers.go b/internal/delivery/handlers/smpp-otp-handlers.go index c2359f1..c79d04e 100644 --- a/internal/delivery/handlers/smpp-otp-handlers.go +++ b/internal/delivery/handlers/smpp-otp-handlers.go @@ -31,7 +31,7 @@ func (h *OTPHandler) GenerateAndSaveOTPHandler(w http.ResponseWriter, r *http.Re return } - err = h.Service.GenerateAndSaveOTP(request.PhoneNumber) + err = h.Service.SaveAndSendOTP(request.PhoneNumber) if err != nil { utils.RespondWithErrorJSON(w, http.StatusInternalServerError, err.Error()) return diff --git a/internal/infrastructure/smpp.go b/internal/infrastructure/smpp.go index 13ffde6..679b24b 100644 --- a/internal/infrastructure/smpp.go +++ b/internal/infrastructure/smpp.go @@ -2,7 +2,11 @@ package smpp import ( "log" + "log/slog" + "os" "smpp-otp/internal/config" + "smpp-otp/pkg/lib/logger" + "time" "github.com/fiorix/go-smpp/smpp" "github.com/fiorix/go-smpp/smpp/pdu" @@ -14,19 +18,33 @@ type SMPPClient struct { } func NewSMPPClient(cfg *config.Config) (*SMPPClient, error) { - smppCfg := cfg.SMPP - tx := &smpp.Transceiver{ - Addr: smppCfg.Addr, - User: smppCfg.User, - Passwd: smppCfg.Pass, - Handler: func(p pdu.Body) {}, + logger, err := logger.SetupLogger(cfg.Env) + if err != nil { + slog.Error("failed to set up logger: %v", err) + os.Exit(1) } - connStatus := tx.Bind() - status := <-connStatus - if status.Status() != smpp.Connected { - log.Println("Failed to connect:", status.Error()) - return nil, status.Error() + smppCfg := cfg.SMPP + var tx *smpp.Transceiver + + for { + tx = &smpp.Transceiver{ + Addr: smppCfg.Addr, + User: smppCfg.User, + Passwd: smppCfg.Pass, + Handler: func(p pdu.Body) {}, + } + + connStatus := tx.Bind() + status := <-connStatus + if status.Status() == smpp.Connected { + logger.InfoLogger.Info("Connected to SMPP server.") + break + } else { + logger.ErrorLogger.Error("Failed to connect:", status.Error()) + logger.InfoLogger.Info("Retrying in 5 seconds...") + time.Sleep(5 * time.Second) // Wait for 5 seconds before retrying + } } return &SMPPClient{Transceiver: tx}, nil diff --git a/internal/service/interfaces/smpp-otp-service.go b/internal/service/interfaces/smpp-otp-service.go index 6c220fc..c4c2a28 100644 --- a/internal/service/interfaces/smpp-otp-service.go +++ b/internal/service/interfaces/smpp-otp-service.go @@ -5,6 +5,6 @@ import ( ) type OTPService interface { - GenerateAndSendOTP(cfg config.Config, phoneNumber string) error + SaveAndSendOTP(cfg config.Config, phoneNumber string) error ValidateOTP(phoneNumber string, otp string) error } diff --git a/internal/service/smpp-otp-service.go b/internal/service/smpp-otp-service.go index ee06dc7..af20acb 100644 --- a/internal/service/smpp-otp-service.go +++ b/internal/service/smpp-otp-service.go @@ -27,7 +27,7 @@ func GenerateOTP() string { return otp } -func (s *OTPService) GenerateAndSaveOTP(phoneNumber string) error { +func (s *OTPService) SaveAndSendOTP(phoneNumber string) error { otp := GenerateOTP() err := s.repository.SaveOTP(phoneNumber, otp) if err != nil {