package register import ( "git.linuxforward.com/byom/byom-onboard/internal/common/jwt" "git.linuxforward.com/byom/byom-onboard/internal/common/models" "git.linuxforward.com/byom/byom-onboard/internal/platform/database" "git.linuxforward.com/byom/byom-onboard/internal/platform/mailer" "github.com/gin-gonic/gin" "github.com/google/uuid" ) type Handler struct { mailer *mailer.Mailer db *database.Database jwt *jwt.JWTClient } func NewHandler(mailerClient *mailer.Mailer, db *database.Database, jwt *jwt.JWTClient) *Handler { return &Handler{ mailer: mailerClient, db: db, jwt: jwt, } } func (h *Handler) Register(c *gin.Context) { var req models.User if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } // Generate email token token, err := h.jwt.GenerateEmailVerificationToken(req.Email) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } req.Token = token req.Status = false // Save registration details to database if err := h.db.RegisterUser(&req); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } // Send email if err := h.mailer.SendVerifyEmail(req.Email, token, req.Plan); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, gin.H{"message": "Registration initiated successfully"}) } func (h *Handler) CheckEmail(c *gin.Context) { var req models.User if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } // Generate email token token, err := h.jwt.GenerateEmailVerificationToken(req.Email) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } req.ID = uuid.New().String() req.Token = token req.Status = false // Save registration details to database if err := h.db.RegisterUser(&req); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } // Send email if err := h.mailer.SendVerifyEmail(req.Email, token, req.Plan); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, gin.H{"message": "Email sent successfully"}) } func (h *Handler) ValidateEmail(c *gin.Context) { token := c.Query("token") result, err := h.jwt.VerifyEmailToken(token) if err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } err = h.db.ChangeSubscriptionStatus(result) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, result) }