Spaces:
Runtime error
Runtime error
File size: 1,555 Bytes
b025147 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package controllers
import (
"math/rand"
"time"
"abdanhafidz.com/go-boilerplate/models/dto"
"abdanhafidz.com/go-boilerplate/services"
"github.com/gin-gonic/gin"
)
type EmailVerificationController interface {
Create(ctx *gin.Context)
Validate(ctx *gin.Context)
Delete(ctx *gin.Context)
}
type emailVerificationController struct {
emailVerificationService services.EmailVerificationService
}
func NewEmailVerificationController(emailVerificationService services.EmailVerificationService) EmailVerificationController {
return &emailVerificationController{emailVerificationService: emailVerificationService}
}
func (c *emailVerificationController) Create(ctx *gin.Context) {
req := RequestJSON[dto.CreateEmailVerificationRequest](ctx)
token := uint(rand.Intn(900000) + 100000)
due := time.Now().Add(15 * time.Minute)
res, err := c.emailVerificationService.CreateToken(ctx.Request.Context(), req.Email, token, due)
ResponseJSON(ctx, req, res, err)
}
func (c *emailVerificationController) Validate(ctx *gin.Context) {
req := RequestJSON[dto.ValidateVerifyEmailRequest](ctx)
err := c.emailVerificationService.VerifyToken(ctx.Request.Context(), req.Email, req.Token)
ResponseJSON[any](ctx, req, gin.H{"status": "ok"}, err)
}
func (c *emailVerificationController) Delete(ctx *gin.Context) {
type delReq struct {
Token uint `json:"token" binding:"required"`
}
req := RequestJSON[delReq](ctx)
err := c.emailVerificationService.DeleteByToken(ctx.Request.Context(), req.Token)
ResponseJSON[any](ctx, req, gin.H{"status": "ok"}, err)
}
|