63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"smpp-otp/internal/service"
|
|
"smpp-otp/pkg/lib/utils"
|
|
)
|
|
|
|
type OTPHandler struct {
|
|
Service service.OTPService
|
|
}
|
|
|
|
func NewOTPHandler(s service.OTPService) *OTPHandler {
|
|
return &OTPHandler{Service: s}
|
|
}
|
|
|
|
func (h *OTPHandler) GenerateAndSaveOTPHandler(w http.ResponseWriter, r *http.Request) {
|
|
var request struct {
|
|
PhoneNumber string `json:"phone_number"`
|
|
}
|
|
|
|
err := json.NewDecoder(r.Body).Decode(&request)
|
|
if err != nil {
|
|
utils.RespondWithErrorJSON(w, http.StatusBadRequest, "Invalid request payload")
|
|
return
|
|
}
|
|
|
|
if request.PhoneNumber == "" {
|
|
utils.RespondWithErrorJSON(w, http.StatusBadRequest, "Phone number is required")
|
|
return
|
|
}
|
|
|
|
err = h.Service.GenerateAndSaveOTP(request.PhoneNumber)
|
|
if err != nil {
|
|
utils.RespondWithErrorJSON(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
}
|
|
|
|
func (h *OTPHandler) ValidateOTPHandler(w http.ResponseWriter, r *http.Request) {
|
|
decoder := json.NewDecoder(r.Body)
|
|
var request struct {
|
|
PhoneNumber string `json:"phone_number"`
|
|
OTP string `json:"otp"`
|
|
}
|
|
err := decoder.Decode(&request)
|
|
if err != nil {
|
|
utils.RespondWithErrorJSON(w, http.StatusBadRequest, "Invalid request payload")
|
|
return
|
|
}
|
|
|
|
err = h.Service.ValidateOTP(request.PhoneNumber, request.OTP)
|
|
if err != nil {
|
|
utils.RespondWithErrorJSON(w, http.StatusBadRequest, err.Error())
|
|
return
|
|
}
|
|
|
|
utils.RespondWithJSON(w, http.StatusOK, "OTP validated successfully")
|
|
}
|