221 lines
4.9 KiB
Go
221 lines
4.9 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"learnsteam/cslms-api/internal/models"
|
|
"learnsteam/cslms-api/internal/services"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type CenterController interface {
|
|
List(*gin.Context)
|
|
Find(*gin.Context)
|
|
Create(*gin.Context)
|
|
Update(*gin.Context)
|
|
}
|
|
|
|
type centerController struct {
|
|
service services.CenterService
|
|
tokenService services.TokenService
|
|
}
|
|
|
|
func NewCenterController(service services.CenterService, tokenService services.TokenService) CenterController {
|
|
return ¢erController{
|
|
service: service,
|
|
tokenService: tokenService,
|
|
}
|
|
}
|
|
|
|
// Center List
|
|
//
|
|
// @Summary 센터 목록 가져오기
|
|
// @Description 센터 목록을 가져옵니다.
|
|
// @Tags 센터
|
|
//
|
|
// @Accept json
|
|
// @Produce json
|
|
//
|
|
// @Security Bearer
|
|
//
|
|
// @Param q query string false "검색어"
|
|
// @Param page query int false "페이지"
|
|
// @Param limit query int false "페이지 사이즈"
|
|
//
|
|
// @Success 200 {object} models.CenterListResponse
|
|
// @Router /center [get]
|
|
func (controller *centerController) List(c *gin.Context) {
|
|
q := c.DefaultQuery("q", "")
|
|
page, err := strconv.Atoi(c.DefaultQuery("page", "1"))
|
|
if err != nil {
|
|
fmt.Println("error : page")
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
limit, err := strconv.Atoi(c.DefaultQuery("limit", "10"))
|
|
if err != nil {
|
|
fmt.Println("error : limit")
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
result, err := controller.service.List(q, page, limit)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
totalNumber, err := controller.service.Total(q)
|
|
if err != nil {
|
|
fmt.Println("error : list")
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
totalPage := int64(totalNumber/int64(limit) + 1)
|
|
|
|
response := models.CenterListResponse{
|
|
Data: *result,
|
|
Total: totalPage,
|
|
Page: page,
|
|
TotalPage: totalPage,
|
|
PageSize: limit,
|
|
}
|
|
|
|
c.JSON(http.StatusOK, response)
|
|
|
|
c.JSON(http.StatusOK, response)
|
|
}
|
|
|
|
// Get Center
|
|
//
|
|
// @Summary 센터 정보 가져오기
|
|
// @Description ID로 센터 정보를 가져옵니다.
|
|
// @Tags 센터
|
|
//
|
|
// @Accept json
|
|
// @Produce json
|
|
//
|
|
// @Security Bearer
|
|
//
|
|
// @Param id path string true "센터 ID"
|
|
//
|
|
// @Success 200 {object} models.Center
|
|
// @Router /center/{id} [get]
|
|
func (controller *centerController) Find(c *gin.Context) {
|
|
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
result, err := controller.service.Find(id)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, result)
|
|
}
|
|
|
|
// Create Center
|
|
//
|
|
// @Summary 센터 생성
|
|
// @Description 센터를 만듭니다.
|
|
// @Tags 센터
|
|
//
|
|
// @Accept json
|
|
// @Produce json
|
|
//
|
|
// @Security Bearer
|
|
//
|
|
// @Param quizBody body models.CenterRequest true "Center Body"
|
|
//
|
|
// @Success 200 {object} models.Center
|
|
// @Router /center [post]
|
|
func (controller *centerController) Create(c *gin.Context) {
|
|
var request models.CenterRequest
|
|
if err := c.ShouldBindJSON(&request); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
center := &models.Center{
|
|
GUID: uuid.NewString(),
|
|
Title: request.Title,
|
|
Name: request.Name,
|
|
OwnerID: request.OwnerID,
|
|
Content: request.Content,
|
|
Info: request.Info,
|
|
Memo: request.Memo,
|
|
Status: request.Status,
|
|
UpdatedAt: time.Now(),
|
|
CreatedAt: time.Now(),
|
|
}
|
|
|
|
result, err := controller.service.Create(center)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, result)
|
|
}
|
|
|
|
// Update Center
|
|
//
|
|
// @Summary 센터 수정
|
|
// @Description 센터를 수정합니다.
|
|
// @Tags 센터
|
|
//
|
|
// @Accept json
|
|
// @Produce json
|
|
//
|
|
// @Security Bearer
|
|
//
|
|
// @Param id path int64 true "Center ID"
|
|
// @Param centerBody body models.CenterRequest true "Center Body"
|
|
//
|
|
// @Success 200 {object} models.Center
|
|
// @Router /center/{id} [put]
|
|
func (controller *centerController) Update(c *gin.Context) {
|
|
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
var request models.CenterRequest
|
|
if err := c.ShouldBindJSON(&request); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
center, err := controller.service.Find(id)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
center.OwnerID = request.OwnerID
|
|
center.Title = request.Title
|
|
center.Name = request.Name
|
|
center.Content = request.Content
|
|
center.Info = request.Info
|
|
center.Memo = request.Memo
|
|
center.Status = request.Status
|
|
center.UpdatedAt = time.Now()
|
|
|
|
result, err := controller.service.Update(center)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, result)
|
|
}
|