handler.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package register
  2. import (
  3. "git.linuxforward.com/byom/byom-onboard/internal/common/jwt"
  4. "git.linuxforward.com/byom/byom-onboard/internal/common/models"
  5. "git.linuxforward.com/byom/byom-onboard/internal/platform/database"
  6. "git.linuxforward.com/byom/byom-onboard/internal/platform/mailer"
  7. "github.com/gin-gonic/gin"
  8. "github.com/google/uuid"
  9. )
  10. type Handler struct {
  11. mailer *mailer.Mailer
  12. db *database.Database
  13. jwt *jwt.JWTClient
  14. }
  15. func NewHandler(mailerClient *mailer.Mailer, db *database.Database, jwt *jwt.JWTClient) *Handler {
  16. return &Handler{
  17. mailer: mailerClient,
  18. db: db,
  19. jwt: jwt,
  20. }
  21. }
  22. func (h *Handler) Register(c *gin.Context) {
  23. var req models.User
  24. if err := c.ShouldBindJSON(&req); err != nil {
  25. c.JSON(400, gin.H{"error": err.Error()})
  26. return
  27. }
  28. // Generate email token
  29. token, err := h.jwt.GenerateEmailVerificationToken(req.Email)
  30. if err != nil {
  31. c.JSON(500, gin.H{"error": err.Error()})
  32. return
  33. }
  34. req.Token = token
  35. req.Status = false
  36. // Save registration details to database
  37. if err := h.db.RegisterUser(&req); err != nil {
  38. c.JSON(500, gin.H{"error": err.Error()})
  39. return
  40. }
  41. // Send email
  42. if err := h.mailer.SendVerifyEmail(req.Email, token, req.Plan); err != nil {
  43. c.JSON(500, gin.H{"error": err.Error()})
  44. return
  45. }
  46. c.JSON(200, gin.H{"message": "Registration initiated successfully"})
  47. }
  48. func (h *Handler) CheckEmail(c *gin.Context) {
  49. var req models.User
  50. if err := c.ShouldBindJSON(&req); err != nil {
  51. c.JSON(400, gin.H{"error": err.Error()})
  52. return
  53. }
  54. // Generate email token
  55. token, err := h.jwt.GenerateEmailVerificationToken(req.Email)
  56. if err != nil {
  57. c.JSON(500, gin.H{"error": err.Error()})
  58. return
  59. }
  60. req.ID = uuid.New().String()
  61. req.Token = token
  62. req.Status = false
  63. // Save registration details to database
  64. if err := h.db.RegisterUser(&req); err != nil {
  65. c.JSON(500, gin.H{"error": err.Error()})
  66. return
  67. }
  68. // Send email
  69. if err := h.mailer.SendVerifyEmail(req.Email, token, req.Plan); err != nil {
  70. c.JSON(500, gin.H{"error": err.Error()})
  71. return
  72. }
  73. c.JSON(200, gin.H{"message": "Email sent successfully"})
  74. }
  75. func (h *Handler) ValidateEmail(c *gin.Context) {
  76. token := c.Query("token")
  77. result, err := h.jwt.VerifyEmailToken(token)
  78. if err != nil {
  79. c.JSON(400, gin.H{"error": err.Error()})
  80. return
  81. }
  82. err = h.db.ChangeSubscriptionStatus(result)
  83. if err != nil {
  84. c.JSON(500, gin.H{"error": err.Error()})
  85. return
  86. }
  87. c.JSON(200, result)
  88. }