Logout
This commit is contained in:
		@@ -1,7 +1,9 @@
 | 
			
		||||
package controllers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"learnsteam/cslms-api/internal/models"
 | 
			
		||||
	"learnsteam/cslms-api/internal/services"
 | 
			
		||||
@@ -12,6 +14,7 @@ import (
 | 
			
		||||
type AuthController interface {
 | 
			
		||||
	Register(*gin.Context)
 | 
			
		||||
	Login(*gin.Context)
 | 
			
		||||
	Logout(*gin.Context)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type authController struct {
 | 
			
		||||
@@ -29,7 +32,7 @@ func NewAuthController(service services.AuthService, tokenService services.Token
 | 
			
		||||
// Register
 | 
			
		||||
//
 | 
			
		||||
// @Summary     회원가입
 | 
			
		||||
// @Description  회원가입
 | 
			
		||||
// @Description 회원가입
 | 
			
		||||
// @Tags        회원가입
 | 
			
		||||
// @Accept      json
 | 
			
		||||
// @Produce      json
 | 
			
		||||
@@ -62,7 +65,7 @@ func (controller *authController) Register(c *gin.Context) {
 | 
			
		||||
// Login 사용자 로그인
 | 
			
		||||
//
 | 
			
		||||
// @Summary       사용자 로그인 로그인
 | 
			
		||||
// @Description    사용자가 로그인합니다.
 | 
			
		||||
// @Description   사용자가 로그인합니다.
 | 
			
		||||
// @Tags          로그인
 | 
			
		||||
//
 | 
			
		||||
// @Accept        json
 | 
			
		||||
@@ -98,25 +101,47 @@ func (controller *authController) Login(c *gin.Context) {
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Logout
 | 
			
		||||
// Logout 로그아웃
 | 
			
		||||
//
 | 
			
		||||
// @Summary       로그아웃
 | 
			
		||||
// @Description   로그아웃하고 Token, Cookie 삭제
 | 
			
		||||
// @Tags          로그아웃
 | 
			
		||||
//
 | 
			
		||||
// @Accept        json
 | 
			
		||||
// @Produce       json
 | 
			
		||||
//
 | 
			
		||||
// @Security Bearer
 | 
			
		||||
//
 | 
			
		||||
// @Router        /auth/logout [post]
 | 
			
		||||
func (controller *authController) Logout(c *gin.Context) {
 | 
			
		||||
	token := c.GetHeader("Authorization")
 | 
			
		||||
	if token == "" {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	token, err := func() (*string, error) {
 | 
			
		||||
		authorization := c.GetHeader("Authorization")
 | 
			
		||||
		strArr := strings.Split(authorization, " ")
 | 
			
		||||
		if len(strArr) == 2 {
 | 
			
		||||
			return &strArr[1], nil
 | 
			
		||||
		} else {
 | 
			
		||||
			return nil, fmt.Errorf("invalid authorization header")
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	err := controller.tokenService.Delete(token)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	user_id := c.GetInt64("sub")
 | 
			
		||||
 | 
			
		||||
	err = controller.tokenService.Invalid(user_id, *token)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	c.SetCookie("Authorization", "", -1, "/", "localhost", false, true)
 | 
			
		||||
	c.SetCookie("RefreshToken", "", -1, "/", "localhost", false, true)
 | 
			
		||||
	c.SetCookie("ExpiresAt", "", -1, "/", "localhost", false, true)
 | 
			
		||||
	c.SetCookie("RefreshExpiresAt", "", -1, "/", "localhost", false, true)
 | 
			
		||||
	c.SetCookie("RefreshTokenExpiresAt", "", -1, "/", "localhost", false, true)
 | 
			
		||||
	c.SetCookie("RefreshTokenExpiresAt", "", -1, "/", "localhost", false, true)
 | 
			
		||||
	c.SetCookie("RefreshTokenExpiresAt", "", -1, "/", "localhost", false, true)
 | 
			
		||||
 | 
			
		||||
	c.JSON(http.StatusOK, gin.H{"message": "logout"})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package controllers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
@@ -11,6 +12,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
	"gorm.io/datatypes"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type QuizPaperController interface {
 | 
			
		||||
@@ -147,6 +149,12 @@ func (controller *quizPaperController) Create(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	user_id := c.GetInt64("sub")
 | 
			
		||||
 | 
			
		||||
	var tag datatypes.JSON
 | 
			
		||||
	tag, err := json.Marshal(request.Tag)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	quizPaper := &models.QuizPaper{
 | 
			
		||||
		GUID:      uuid.NewString(),
 | 
			
		||||
		CenterID:  request.CenterID,
 | 
			
		||||
@@ -154,7 +162,7 @@ func (controller *quizPaperController) Create(c *gin.Context) {
 | 
			
		||||
		Title:     request.Title,
 | 
			
		||||
		Content:   request.Content,
 | 
			
		||||
		Category:  request.Category,
 | 
			
		||||
		Tag:       request.Tag,
 | 
			
		||||
		Tag:       tag,
 | 
			
		||||
		Status:    request.Status,
 | 
			
		||||
		CreatedAt: time.Now(),
 | 
			
		||||
		UpdatedAt: time.Now(),
 | 
			
		||||
@@ -204,13 +212,20 @@ func (controller *quizPaperController) Update(c *gin.Context) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var tag datatypes.JSON
 | 
			
		||||
	tag, err = json.Marshal(request.Tag)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	user_id := c.GetInt64("sub")
 | 
			
		||||
	quizPaper.ManagerID = user_id
 | 
			
		||||
	quizPaper.CenterID = request.CenterID
 | 
			
		||||
	quizPaper.Title = request.Title
 | 
			
		||||
	quizPaper.Content = request.Content
 | 
			
		||||
	quizPaper.Category = request.Category
 | 
			
		||||
	quizPaper.Tag = request.Tag
 | 
			
		||||
	quizPaper.Tag = tag
 | 
			
		||||
	quizPaper.Status = request.Status
 | 
			
		||||
	quizPaper.UpdatedAt = time.Now()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -109,18 +109,6 @@ func (controller *userController) Find(c *gin.Context) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sub := c.GetString("sub")
 | 
			
		||||
	user_id, err := strconv.ParseInt(sub, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if user_id != id {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": "Wrong user"})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result, err := controller.service.Find(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
 
 | 
			
		||||
@@ -159,6 +159,7 @@ func (controller *userQuizController) Create(c *gin.Context) {
 | 
			
		||||
		CenterID:        request.CenterID,
 | 
			
		||||
		UserQuizPaperID: request.UserQuizPaperID,
 | 
			
		||||
		No:              request.No,
 | 
			
		||||
		QuizID:          request.QuizID,
 | 
			
		||||
		QuestionType:    request.QuestionType,
 | 
			
		||||
		Question:        request.Question,
 | 
			
		||||
		Content:         content,
 | 
			
		||||
@@ -223,8 +224,29 @@ func (controller *userQuizController) Update(c *gin.Context) {
 | 
			
		||||
	// Result          string         `json:"result" example:"success"`
 | 
			
		||||
	// Score           float32        `json:"score" example:"10"`
 | 
			
		||||
 | 
			
		||||
	var content datatypes.JSON
 | 
			
		||||
	content, err = json.Marshal(request.Content)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var answer datatypes.JSON
 | 
			
		||||
	answer, err = json.Marshal([]string{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	userquiz.CenterID = request.CenterID
 | 
			
		||||
	userquiz.UserQuizPaperID = request.UserQuizPaperID
 | 
			
		||||
	userquiz.No = request.No
 | 
			
		||||
	userquiz.QuestionType = request.QuestionType
 | 
			
		||||
	userquiz.Question = request.Question
 | 
			
		||||
	userquiz.Content = content
 | 
			
		||||
	userquiz.Answer = answer
 | 
			
		||||
	userquiz.Status = request.Status
 | 
			
		||||
	userquiz.Score = request.Score
 | 
			
		||||
 | 
			
		||||
	result, err := controller.service.Update(userquiz)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package controllers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
@@ -160,14 +159,14 @@ func (controller *userQuizPaperController) Create(c *gin.Context) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var users []int64
 | 
			
		||||
	err = json.Unmarshal(request.Users, &users)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// var users []int64
 | 
			
		||||
	// err = json.Unmarshal(request.Users, &users)
 | 
			
		||||
	// if err != nil {
 | 
			
		||||
	// 	c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
	// 	return
 | 
			
		||||
	// }
 | 
			
		||||
 | 
			
		||||
	templates := controller.service.Generate(users, quizPaper)
 | 
			
		||||
	templates := controller.service.Generate(request.Users, quizPaper)
 | 
			
		||||
	userQuizPapers, err := controller.service.Insert(templates)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user