learnsteam-quiz-api/internal/controllers/auth.go
2023-11-17 14:27:42 +09:00

98 lines
2.4 KiB
Go

package controllers
import (
"net/http"
"learnsteam/learsteam-quiz-api/internal/models"
"learnsteam/learsteam-quiz-api/internal/services"
"github.com/gin-gonic/gin"
)
type AuthController interface {
Register(*gin.Context)
Login(*gin.Context)
}
type authController struct {
service services.AuthService
tokenService services.TokenService
}
func NewAuthController(service services.AuthService, tokenService services.TokenService) AuthController {
return &authController{
service: service,
tokenService: tokenService,
}
}
// Register
//
// @Summary 회원가입
// @Description username, name, password 를 입력하여 회원가입
// @Tags 회원가입
// @Accept json
// @Produce json
//
// @Param username body string true "username"
// @Param name body string true "이름"
// @Param password body string true "비밀번호"
//
// @Success 200 {object} models.RegisterResponse
// @Router /auth/register [post]
func (controller *authController) Register(c *gin.Context) {
var params models.RegisterRequest
if c.BindJSON(&params) != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"})
return
}
user, err := controller.service.Register(&params)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
token, err := controller.tokenService.Create(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})
}
// Login
//
// @Summary 로그인
// @Description username, password 를 입력하여 로그인
// @Tags 로그인
// @Accept json
// @Produce json
//
// @Param username body string true "username"
// @Param password body string true "비밀번호"
//
// @Success 200 {object} models.LoginResponse
// @Router /auth/login [post]
func (controller *authController) Login(c *gin.Context) {
var request models.LoginRequest
if c.BindJSON(&request) != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"})
return
}
user, err := controller.service.Login(&request)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
token, err := controller.tokenService.Create(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})
}