68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"studioj/boilerplate_go/internal/models"
|
|
"studioj/boilerplate_go/internal/services"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type AuthController interface {
|
|
Register(*gin.Context)
|
|
Login(*gin.Context)
|
|
}
|
|
|
|
type authController struct {
|
|
service services.AuthService
|
|
}
|
|
|
|
func NewAuthController(service services.AuthService) AuthController {
|
|
return &authController{
|
|
service: service,
|
|
}
|
|
}
|
|
|
|
func (controller *authController) Register(c *gin.Context) {
|
|
var params models.RegisterRequest
|
|
if c.BindJSON(¶ms) != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"})
|
|
return
|
|
}
|
|
|
|
user, err := controller.service.Register(¶ms)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
token, err := controller.service.CreateToken(user.ID)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"user": user, "token": token.Token, "refresh_token": token.RefreshToken})
|
|
}
|
|
|
|
func (controller *authController) Login(c *gin.Context) {
|
|
var params models.LoginRequest
|
|
if c.BindJSON(¶ms) != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"})
|
|
return
|
|
}
|
|
|
|
user, err := controller.service.Login(¶ms)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
token, err := controller.service.CreateToken(user.ID)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"user": user, "token": token.Token, "refresh_token": token.RefreshToken})
|
|
}
|