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(¶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.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}) }