package controllers import ( "fmt" "net/http" "strconv" "learnsteam/cslms-api/internal/models" "learnsteam/cslms-api/internal/services" "github.com/gin-gonic/gin" ) type UserController interface { List(*gin.Context) Find(*gin.Context) } type userController struct { service services.UserService tokenService services.TokenService } func NewUserController(service services.UserService, tokenService services.TokenService) UserController { return &userController{ service: service, tokenService: tokenService, } } // User 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.UserListResponse // @Router /user [get] func (controller *userController) 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.UserListResponse{ Data: *result, Total: totalPage, Page: page, TotalPage: totalPage, PageSize: limit, } c.JSON(http.StatusOK, response) c.JSON(http.StatusOK, response) } // Get User // // @Summary 사용자 정보 가져오기 // @Description ID로 사용자 정보를 가져옵니다. // @Tags 사용자 // // @Accept json // @Produce json // // @Security Bearer // // @Param id path string true "사용자 ID" // // @Success 200 {object} models.User // @Router /user/{id} [get] func (controller *userController) 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 } 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()}) return } c.JSON(http.StatusOK, result) }