From 576dd1d356c1df83364ad072daed003c91bd52ab Mon Sep 17 00:00:00 2001 From: harry Date: Sun, 19 Mar 2023 21:20:06 +0900 Subject: [PATCH] =?UTF-8?q?swagger=20setting=20+=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=20=EB=AA=A9=EB=A1=9D=20API=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../api/controller/AdminController.java | 26 +++++++++++------- .../api/controller/BoardController.java | 7 ++++- .../api/controller/ContentsController.java | 4 +++ .../api/controller/MemberController.java | 4 +++ .../api/controller/TodolistController.java | 15 +++++++++++ .../dashboardbe/api/dto/PageResponseDTO.java | 17 ------------ .../dashboardbe/api/service/AdminService.java | 6 +++-- .../api/service/AdminServiceImpl.java | 22 ++++----------- .../api/service/BoardServiceImpl.java | 2 +- .../com/dashboardbe/common/SwaggerConfig.java | 27 +++++++++++++++++++ src/main/resources/application.yml | 12 +++++++++ 12 files changed, 95 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/com/dashboardbe/api/dto/PageResponseDTO.java create mode 100644 src/main/java/com/dashboardbe/common/SwaggerConfig.java diff --git a/build.gradle b/build.gradle index a8bd49d..69fa4cc 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ bootJar { dependencies { implementation 'org.springframework.boot:spring-boot-starter-batch' // batch - + implementation 'org.springdoc:springdoc-openapi-ui:1.6.15' // swagger implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' diff --git a/src/main/java/com/dashboardbe/api/controller/AdminController.java b/src/main/java/com/dashboardbe/api/controller/AdminController.java index 64f9cb7..6e33ce7 100644 --- a/src/main/java/com/dashboardbe/api/controller/AdminController.java +++ b/src/main/java/com/dashboardbe/api/controller/AdminController.java @@ -1,26 +1,28 @@ package com.dashboardbe.api.controller; import com.dashboardbe.api.dto.AdminDTO; +import com.dashboardbe.api.dto.AdminResponseDTO; import com.dashboardbe.api.dto.LoginDTO; -import com.dashboardbe.api.dto.PageResponseDTO; import com.dashboardbe.api.repository.AdminRepository; import com.dashboardbe.api.service.AdminService; import com.dashboardbe.common.SessionUtil; import com.dashboardbe.common.response.BaseResponseBody; import com.dashboardbe.domain.Admin; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.web.PageableDefault; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import java.util.List; import java.util.Optional; @RestController @RequiredArgsConstructor +@Tag(name = "Admin Controller", description = "관리자 컨트롤러") public class AdminController { private final AdminService adminService; @@ -28,6 +30,7 @@ public class AdminController { /*** * 회원가입 컨트롤러 */ + @Operation(summary = "[테스트용] 회원가입 API", description = "관리자 회원가입") @PostMapping("/admin/save") public String save(@RequestBody AdminDTO adminDTO) { adminService.save(adminDTO); @@ -37,6 +40,7 @@ public String save(@RequestBody AdminDTO adminDTO) { /** * 관리자 로그인 컨트롤러 */ + @Operation(summary = "[관리자] 로그인 API", description = "관리자 로그인 처리하고 세션 생성") @PostMapping("/admin/login") public ResponseEntity> login(@RequestBody LoginDTO loginDTO, HttpServletRequest request) { String loginId = adminService.login(loginDTO); @@ -83,6 +87,7 @@ else if (loginId.equals("WRONG_PWD")) { /** * 로그아웃 컨트롤러 */ + @Operation(summary = "[관리자] 로그아웃 API", description = "관리자 로그아웃 처리하고 세션 소멸") @PostMapping("/admin/logout") public String logout(HttpServletRequest request) { // false 옵션 -> 세션이 없는 경우 새로 생성하지 않도록 @@ -98,24 +103,25 @@ public String logout(HttpServletRequest request) { /** * 관리자 목록 컨트롤러 */ + @Operation(summary = "[관리자] 관리자 목록 API", description = "사이드바 상단에 보여주는 관리자 목록") @GetMapping("/admin/list") - public ResponseEntity> list(@PageableDefault(page = 0, size = 4, sort = "id") Pageable pageable, HttpSession session) { + public ResponseEntity>> list(HttpSession session) { String loginId = SessionUtil.getLoginId(session); Optional optionalAdmin = adminRepository.findById(loginId); // 올바른 관리자인 경우 if (optionalAdmin.isPresent()) { - PageResponseDTO pageResponseDTO = adminService.list(pageable); - return new ResponseEntity>( - new BaseResponseBody( + List list = adminService.list(); + return new ResponseEntity>>( + new BaseResponseBody>( HttpStatus.OK.value(), "성공", - pageResponseDTO + list ), HttpStatus.OK ); } else { - return new ResponseEntity>( - new BaseResponseBody( + return new ResponseEntity>>( + new BaseResponseBody>( HttpStatus.NOT_FOUND.value(), "존재하지 않는 Admin ID입니다.", null diff --git a/src/main/java/com/dashboardbe/api/controller/BoardController.java b/src/main/java/com/dashboardbe/api/controller/BoardController.java index bedff4e..02cd50b 100644 --- a/src/main/java/com/dashboardbe/api/controller/BoardController.java +++ b/src/main/java/com/dashboardbe/api/controller/BoardController.java @@ -8,6 +8,8 @@ import com.dashboardbe.common.SessionUtil; import com.dashboardbe.common.response.BaseResponseBody; import com.dashboardbe.domain.Admin; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -22,14 +24,16 @@ @RestController @RequiredArgsConstructor +@Tag(name = "Board Controller", description = "게시판 컨트롤러") public class BoardController { private final BoardService boardService; private final AdminRepository adminRepository; /** - * 게시물 등록 컨트롤러 + * 게시물 작성 컨트롤러 */ + @Operation(summary = "[테스트용] 게시물 작성 API", description = "게시물 작성") @PostMapping("/board") @LoginCheck public ResponseEntity> addMemo(@RequestBody BoardRequestDTO dto, HttpSession session) { @@ -62,6 +66,7 @@ public ResponseEntity> addMemo(@RequestBody BoardReques /** * 게시물 리스트 컨트롤러 */ + @Operation(summary = "[게시판] 게시물 리스트 API", description = "게시물 리스트") @GetMapping("/board/list") @LoginCheck public ResponseEntity>> list(HttpSession session) { diff --git a/src/main/java/com/dashboardbe/api/controller/ContentsController.java b/src/main/java/com/dashboardbe/api/controller/ContentsController.java index e842138..ad80518 100644 --- a/src/main/java/com/dashboardbe/api/controller/ContentsController.java +++ b/src/main/java/com/dashboardbe/api/controller/ContentsController.java @@ -4,6 +4,8 @@ import com.dashboardbe.api.service.ContentsService; import com.dashboardbe.common.response.BaseResponseBody; import com.dashboardbe.domain.Contents; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +17,7 @@ @RestController @RequiredArgsConstructor +@Tag(name = "Contents Controller", description = "동영상 콘텐츠 컨트롤러") public class ContentsController { private final ContentsService contentsService; @@ -23,6 +26,7 @@ public class ContentsController { /** * 조회수 증가 + 콘텐츠 조회 기록 저장 컨트롤러 */ + @Operation(summary = "[테스트용] 조회수 증가 API", description = "콘텐츠 클릭 시 조회수 증가시키고 콘텐츠 조회 기록을 저장한다.") @GetMapping("/contents") public ResponseEntity> addHits(@RequestParam Long contentsId) { Optional optionalContents = contentsRepository.findById(contentsId); diff --git a/src/main/java/com/dashboardbe/api/controller/MemberController.java b/src/main/java/com/dashboardbe/api/controller/MemberController.java index e44bfb5..e8f8e51 100644 --- a/src/main/java/com/dashboardbe/api/controller/MemberController.java +++ b/src/main/java/com/dashboardbe/api/controller/MemberController.java @@ -4,6 +4,8 @@ import com.dashboardbe.api.service.MemberService; import com.dashboardbe.common.SessionUtil; import com.dashboardbe.common.response.BaseResponseBody; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,6 +18,7 @@ @RestController @RequiredArgsConstructor +@Tag(name = "Member Controller", description = "회원 컨트롤러") public class MemberController { private final MemberService memberService; @@ -23,6 +26,7 @@ public class MemberController { /** * 회원 로그인 + 방문자 기록 저장 컨트롤러 */ + @Operation(summary = "[테스트용] 회원 로그인 API", description = "회원 로그인 처리 후 방문자 기록을 저장한다.") @PostMapping("/member/login") public ResponseEntity> login(@RequestBody LoginDTO loginDTO, HttpServletRequest request) { String loginId = memberService.login(loginDTO); diff --git a/src/main/java/com/dashboardbe/api/controller/TodolistController.java b/src/main/java/com/dashboardbe/api/controller/TodolistController.java index ff311d0..e8bf18d 100644 --- a/src/main/java/com/dashboardbe/api/controller/TodolistController.java +++ b/src/main/java/com/dashboardbe/api/controller/TodolistController.java @@ -10,6 +10,8 @@ import com.dashboardbe.common.response.BaseResponseBody; import com.dashboardbe.domain.Admin; import com.dashboardbe.domain.Todolist; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -21,12 +23,17 @@ @RestController @RequiredArgsConstructor +@Tag(name = "Todolist Controller", description = "오늘의 할 일 컨트롤러") public class TodolistController { private final TodolistService todolistService; private final AdminRepository adminRepository; private final TodolistRepository todolistRepository; + /** + * 오늘의 할 일 추가 컨트롤러 + */ + @Operation(summary = "[테스트용] 오늘의 할 일 추가 API", description = "오늘의 할 일 추가") @PostMapping("/memo") @LoginCheck public ResponseEntity> addMemo(@RequestBody TodoRequestDTO dto, HttpSession session) { @@ -56,6 +63,10 @@ public ResponseEntity> addMemo(@RequestBody TodoRequest } } + /** + * 오늘의 할 일 삭제 컨트롤러 + */ + @Operation(summary = "[테스트용] 오늘의 할 일 삭제 API", description = "오늘의 할 일 삭제") @GetMapping("/memo/delete") @LoginCheck public ResponseEntity> deleteMemo(@RequestParam Long todolistId, HttpSession session) { @@ -98,6 +109,10 @@ public ResponseEntity> deleteMemo(@RequestParam Long to } } + /** + * 오늘의 할 일 목록 컨트롤러 + */ + @Operation(summary = "[테스트용] 오늘의 할 일 목록 API", description = "오늘의 할 일 목록") @GetMapping("/memo/list") @LoginCheck public ResponseEntity>> list(HttpSession session) { diff --git a/src/main/java/com/dashboardbe/api/dto/PageResponseDTO.java b/src/main/java/com/dashboardbe/api/dto/PageResponseDTO.java deleted file mode 100644 index bf06e06..0000000 --- a/src/main/java/com/dashboardbe/api/dto/PageResponseDTO.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.dashboardbe.api.dto; - -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.springframework.data.domain.Page; - -@Data -@NoArgsConstructor -public class PageResponseDTO { - Page page; - - @Builder - public PageResponseDTO(Page page) { - this.page = page; - } -} diff --git a/src/main/java/com/dashboardbe/api/service/AdminService.java b/src/main/java/com/dashboardbe/api/service/AdminService.java index b486889..314d15b 100644 --- a/src/main/java/com/dashboardbe/api/service/AdminService.java +++ b/src/main/java/com/dashboardbe/api/service/AdminService.java @@ -1,13 +1,15 @@ package com.dashboardbe.api.service; +import com.dashboardbe.api.dto.AdminResponseDTO; import com.dashboardbe.api.dto.LoginDTO; -import com.dashboardbe.api.dto.PageResponseDTO; import com.dashboardbe.api.dto.AdminDTO; import org.springframework.data.domain.Pageable; +import java.util.List; + public interface AdminService { void save(AdminDTO adminDTO); String login(LoginDTO loginDTO); - PageResponseDTO list(Pageable pageable); + List list(); } diff --git a/src/main/java/com/dashboardbe/api/service/AdminServiceImpl.java b/src/main/java/com/dashboardbe/api/service/AdminServiceImpl.java index 8306fbe..5359fa5 100644 --- a/src/main/java/com/dashboardbe/api/service/AdminServiceImpl.java +++ b/src/main/java/com/dashboardbe/api/service/AdminServiceImpl.java @@ -4,13 +4,9 @@ import com.dashboardbe.api.dto.AdminDTO; import com.dashboardbe.api.dto.AdminResponseDTO; import com.dashboardbe.api.dto.LoginDTO; -import com.dashboardbe.api.dto.PageResponseDTO; import com.dashboardbe.api.repository.AdminRepository; import com.dashboardbe.domain.Admin; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -70,10 +66,9 @@ public String login(LoginDTO loginDTO) { */ @Override @LoginCheck - public PageResponseDTO list(Pageable pageable) { - Page adminList = adminRepository.findAll(pageable); - List adminResponseDTOList = new ArrayList<>(); - + public List list() { + List list = new ArrayList<>(); + List adminList = adminRepository.findAll(); for (Admin admin : adminList) { AdminResponseDTO adminResponseDTO = AdminResponseDTO.builder() .adminId(admin.getId()) @@ -81,15 +76,8 @@ public PageResponseDTO list(Pageable pageable) { .phoneNumber(admin.getPhoneNumber()) .role(admin.getRole()) .build(); - adminResponseDTOList.add(adminResponseDTO); + list.add(adminResponseDTO); } - - Page page = new PageImpl<>(adminResponseDTOList, pageable, adminList.getTotalElements()); - - PageResponseDTO pageResponseDTO = PageResponseDTO.builder() - .page(page) - .build(); - - return pageResponseDTO; + return list; } } diff --git a/src/main/java/com/dashboardbe/api/service/BoardServiceImpl.java b/src/main/java/com/dashboardbe/api/service/BoardServiceImpl.java index 73befb5..9a06501 100644 --- a/src/main/java/com/dashboardbe/api/service/BoardServiceImpl.java +++ b/src/main/java/com/dashboardbe/api/service/BoardServiceImpl.java @@ -18,7 +18,7 @@ public class BoardServiceImpl implements BoardService { private final BoardRepository boardRepository; /** - * 게시물 등록 서비스 로직 + * 게시물 작성 서비스 로직 */ @Override public void save(String content, Admin admin) { diff --git a/src/main/java/com/dashboardbe/common/SwaggerConfig.java b/src/main/java/com/dashboardbe/common/SwaggerConfig.java new file mode 100644 index 0000000..36d18bb --- /dev/null +++ b/src/main/java/com/dashboardbe/common/SwaggerConfig.java @@ -0,0 +1,27 @@ +package com.dashboardbe.common; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@OpenAPIDefinition( + info = @io.swagger.v3.oas.annotations.info.Info( + title = "ST Dashboard API 명세서", + description = "동아ST 기업 프로젝트 API 명세서입니다.", + version = "v1") +) +@RequiredArgsConstructor +@Configuration +public class SwaggerConfig { + + @Bean + public GroupedOpenApi stOpenApi() { + + return GroupedOpenApi.builder() + .group("대시보드 API v1") + .pathsToMatch("/**") + .build(); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index da74055..f23c8cb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -23,6 +23,18 @@ spring: jdbc: initialize-schema: always +# swagger 설정 +springdoc: + swagger-ui: + path: /api-docs + disable-swagger-default-url: true + display-request-duration: true + operations-sorter: alpha # 정렬 기준 + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + logging: level: sql: info \ No newline at end of file