From 4d42e1ad058cab1b01d8f93f121dfc199c163f36 Mon Sep 17 00:00:00 2001 From: chanwoo7 Date: Sat, 10 Aug 2024 15:15:01 +0900 Subject: [PATCH] =?UTF-8?q?[refactor]=20=EC=9E=A5=EB=A5=B4=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=EC=97=90=20pageNo,=20pageSize=20?= =?UTF-8?q?=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../genre/controller/GenreController.java | 64 +++++++++++++------ .../genre/service/GenreResponseParser.java | 14 ++-- .../domain/genre/service/GenreService.java | 16 ++--- 3 files changed, 59 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/book/backend/domain/genre/controller/GenreController.java b/src/main/java/com/book/backend/domain/genre/controller/GenreController.java index 0d986547..430cb81d 100644 --- a/src/main/java/com/book/backend/domain/genre/controller/GenreController.java +++ b/src/main/java/com/book/backend/domain/genre/controller/GenreController.java @@ -32,17 +32,23 @@ public class GenreController { @Operation(summary = "일주일 인기순", description = "장르 코드(2자리)를 입력받아 1주일 인기순 도서 리스트를 반환합니다.", parameters = { @Parameter(name = "genreCode", description = "세부 장르 코드 (필수, figma 참고)"), - @Parameter(name = "maxSize", description = "리스트 길이 제한 (선택)")}, + @Parameter(name = "pageNo", description = "페이지 번호 (필수)"), + @Parameter(name = "pageSize", description = "페이지 당 요소 수 (필수)")}, responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = LoanItemSrchResponseDto.class)), description = LoanItemSrchResponseDto.description)}) @GetMapping("/aWeekTrend") public ResponseEntity aWeekTrend(@RequestParam String genreCode, - @RequestParam(required = false) Integer maxSize) throws Exception { + @RequestParam String pageNo, + @RequestParam String pageSize) throws Exception { RequestLogger.param(new String[]{"kdcNum"}, genreCode); requestValidate.isValidGenreCode(genreCode); - LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder().dtl_kdc(genreCode).build(); - LinkedList response = genreService.periodToNowTrend(requestDto, 7, maxSize); + LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder() + .dtl_kdc(genreCode) + .pageNo(pageNo) + .pageSize(pageSize) + .build(); + LinkedList response = genreService.periodToNowTrend(requestDto, 7); return responseTemplate.success(response, HttpStatus.OK); } @@ -51,17 +57,23 @@ public ResponseEntity aWeekTrend(@RequestParam String genreCode, @Operation(summary = "한 달 인기순", description = "장르 코드(2자리)를 입력받아 한 달 인기순 도서 리스트를 반환합니다.", parameters = { @Parameter(name = "genreCode", description = "세부 장르 코드 (필수, figma 참고)"), - @Parameter(name = "maxSize", description = "리스트 길이 제한 (선택)")}, + @Parameter(name = "pageNo", description = "페이지 번호 (필수)"), + @Parameter(name = "pageSize", description = "페이지 당 요소 수 (필수)")}, responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = LoanItemSrchResponseDto.class)), description = LoanItemSrchResponseDto.description)}) @GetMapping("/aMonthTrend") public ResponseEntity aMonthTrend(@RequestParam String genreCode, - @RequestParam(required = false) Integer maxSize) throws Exception { + @RequestParam String pageNo, + @RequestParam String pageSize) throws Exception { RequestLogger.param(new String[]{"kdcNum"}, genreCode); requestValidate.isValidGenreCode(genreCode); - LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder().dtl_kdc(genreCode).build(); - LinkedList response = genreService.periodToNowTrend(requestDto, 30, maxSize); + LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder() + .dtl_kdc(genreCode) + .pageNo(pageNo) + .pageSize(pageSize) + .build(); + LinkedList response = genreService.periodToNowTrend(requestDto, 30); return responseTemplate.success(response, HttpStatus.OK); } @@ -71,17 +83,23 @@ public ResponseEntity aMonthTrend(@RequestParam String genreCode, "단, 월요일 또는 화요일이면 저번 주차로, 아니면 이번 주차로 계산됩니다.", parameters = { @Parameter(name = "genreCode", description = "세부 장르 코드 (필수, figma 참고)"), - @Parameter(name = "maxSize", description = "리스트 길이 제한 (선택)")}, + @Parameter(name = "pageNo", description = "페이지 번호 (필수)"), + @Parameter(name = "pageSize", description = "페이지 당 요소 수 (필수)")}, responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = LoanItemSrchResponseDto.class)), description = LoanItemSrchResponseDto.description)}) @GetMapping("/thisWeekTrend") public ResponseEntity thisWeekTrend(@RequestParam String genreCode, - @RequestParam(required = false) Integer maxSize) throws Exception { + @RequestParam String pageNo, + @RequestParam String pageSize) throws Exception { RequestLogger.param(new String[]{"kdcNum"}, genreCode); requestValidate.isValidGenreCode(genreCode); - LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder().dtl_kdc(genreCode).build(); - LinkedList response = genreService.thisWeekTrend(requestDto, maxSize); + LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder() + .dtl_kdc(genreCode) + .pageNo(pageNo) + .pageSize(pageSize) + .build(); + LinkedList response = genreService.thisWeekTrend(requestDto); return responseTemplate.success(response, HttpStatus.OK); } @@ -100,29 +118,35 @@ public ResponseEntity random(@RequestParam String genreCode, RequestLogger.param(new String[]{"kdcNum"}, genreCode); requestValidate.isValidGenreCode(genreCode); - LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder().dtl_kdc(genreCode).build(); + LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder() + .dtl_kdc(genreCode) + .build(); LinkedList response = genreService.random(requestDto, maxSize); return responseTemplate.success(response, HttpStatus.OK); } - /** - * 신작 인기순 - 중주제 KDC 번호(2자리) 입력 시 2년 내 출판된 인기 도서 목록 리턴 - */ + // 신작 인기순 @Operation(summary = "신작 인기순", description = "장르 코드(2자리)를 입력받아 최근 2년 내 출판된 인기 도서 리스트를 반환합니다.", parameters = { @Parameter(name = "genreCode", description = "세부 장르 코드 (필수, figma 참고)"), - @Parameter(name = "maxSize", description = "리스트 길이 제한 (선택)")}, + @Parameter(name = "pageNo", description = "페이지 번호 (필수)"), + @Parameter(name = "pageSize", description = "페이지 당 요소 수 (필수)")}, responses = {@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = LoanItemSrchResponseDto.class)), description = LoanItemSrchResponseDto.description)}) @GetMapping("/newTrend") public ResponseEntity newTrend(@RequestParam String genreCode, - @RequestParam(required = false) Integer maxSize) throws Exception { + @RequestParam String pageNo, + @RequestParam String pageSize) throws Exception { RequestLogger.param(new String[]{"kdcNum"}, genreCode); requestValidate.isValidGenreCode(genreCode); - LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder().dtl_kdc(genreCode).build(); - LinkedList response = genreService.newTrend(requestDto, maxSize); + LoanItemSrchRequestDto requestDto = LoanItemSrchRequestDto.builder() + .dtl_kdc(genreCode) + .pageNo(pageNo) + .pageSize(pageSize) + .build(); + LinkedList response = genreService.newTrend(requestDto); return responseTemplate.success(response, HttpStatus.OK); } diff --git a/src/main/java/com/book/backend/domain/genre/service/GenreResponseParser.java b/src/main/java/com/book/backend/domain/genre/service/GenreResponseParser.java index 4e49efb3..6fb532bf 100644 --- a/src/main/java/com/book/backend/domain/genre/service/GenreResponseParser.java +++ b/src/main/java/com/book/backend/domain/genre/service/GenreResponseParser.java @@ -13,22 +13,22 @@ @RequiredArgsConstructor public class GenreResponseParser { private final ResponseParser responseParser; - private static final int NEW_TREND_YEAR_OFFSET = 2; // 최근 트렌드로 간주되는 연도 범위 + private static final int NEW_TREND_YEAR_OFFSET = 2; // 최근 트렌드 연도 범위 - public LinkedList periodTrend(JSONObject jsonResponse, Integer maxSize) { - return filterResponses(jsonResponse, maxSize, null); + public LinkedList periodTrend(JSONObject jsonResponse) { + return filterResponses(jsonResponse, null, null); } public LinkedList random(JSONObject jsonResponse, Integer maxSize) { - LinkedList filteredResponses = filterResponses(jsonResponse, maxSize, null); + LinkedList filteredResponses = filterResponses(jsonResponse, null, maxSize); return RandomPicker.randomPick(filteredResponses, maxSize); } - public LinkedList newTrend(JSONObject jsonResponse, int currentYear, Integer maxSize) { - return filterResponses(jsonResponse, maxSize, currentYear); + public LinkedList newTrend(JSONObject jsonResponse, int currentYear) { + return filterResponses(jsonResponse, currentYear, null); } - private LinkedList filterResponses(JSONObject jsonResponse, Integer maxSize, Integer yearThreshold) { + private LinkedList filterResponses(JSONObject jsonResponse, Integer yearThreshold, Integer maxSize) { LinkedList loanTrendResponseList = responseParser.loanTrend(jsonResponse); LinkedList responseList = new LinkedList<>(); diff --git a/src/main/java/com/book/backend/domain/genre/service/GenreService.java b/src/main/java/com/book/backend/domain/genre/service/GenreService.java index 78cafd37..65c00c5a 100644 --- a/src/main/java/com/book/backend/domain/genre/service/GenreService.java +++ b/src/main/java/com/book/backend/domain/genre/service/GenreService.java @@ -41,15 +41,15 @@ public Genre findByMainKdcNumAndSubKdcNum(String mainKdcNum, String subKdcNum) { .orElseThrow(() -> new IllegalArgumentException("KDC 번호가" + mainKdcNum + subKdcNum + "인 장르를 찾을 수 없습니다.")); } - public LinkedList periodToNowTrend(LoanItemSrchRequestDto requestDto, Integer dayPeriod, Integer maxSize) throws Exception { + public LinkedList periodToNowTrend(LoanItemSrchRequestDto requestDto, Integer dayPeriod) throws Exception { LocalDate today = LocalDate.now(); LocalDate startDt = today.minusDays(dayPeriod + 1); LocalDate endDt = today.minusDays(1); - return periodTrend(requestDto, startDt, endDt, maxSize); + return periodTrend(requestDto, startDt, endDt); } - public LinkedList thisWeekTrend(LoanItemSrchRequestDto requestDto, Integer maxSize) throws Exception { + public LinkedList thisWeekTrend(LoanItemSrchRequestDto requestDto) throws Exception { LocalDate today = LocalDate.now(); LocalDate startDt, endDt; // 월요일 또는 화요일이면 저번주로, 아니면 이번주로 계산 @@ -61,18 +61,18 @@ public LinkedList thisWeekTrend(LoanItemSrchRequestDto endDt = today.minusDays(1); } - return periodTrend(requestDto, startDt, endDt, maxSize); + return periodTrend(requestDto, startDt, endDt); } // periodToNowTrend, thisWeekTrend에 의해 호출됨 - public LinkedList periodTrend(LoanItemSrchRequestDto requestDto, LocalDate startDt, LocalDate endDt, Integer maxSize) throws Exception { + public LinkedList periodTrend(LoanItemSrchRequestDto requestDto, LocalDate startDt, LocalDate endDt) throws Exception { String subUrl = "loanItemSrch"; requestDto.setStartDt(startDt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); requestDto.setEndDt(endDt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); JSONObject JsonResponse = openAPI.connect(subUrl, requestDto, new LoanItemSrchResponseDto()); - return new LinkedList<>(genreResponseParser.periodTrend(JsonResponse, maxSize)); + return new LinkedList<>(genreResponseParser.periodTrend(JsonResponse)); } public LinkedList random(LoanItemSrchRequestDto requestDto, Integer maxSize) throws Exception { @@ -85,7 +85,7 @@ public LinkedList random(LoanItemSrchRequestDto request return new LinkedList<>(genreResponseParser.random(JsonResponse, maxSize)); } - public LinkedList newTrend(LoanItemSrchRequestDto requestDto, Integer maxSize) throws Exception { + public LinkedList newTrend(LoanItemSrchRequestDto requestDto) throws Exception { String subUrl = "loanItemSrch"; requestDto.setPageSize("1500"); // 연도로 필터링하기 전 페이지 크기 설정 @@ -94,7 +94,7 @@ public LinkedList newTrend(LoanItemSrchRequestDto reque JSONObject JsonResponse = openAPI.connect(subUrl, requestDto, new LoanItemSrchResponseDto()); - return new LinkedList<>(genreResponseParser.newTrend(JsonResponse, currentYear, maxSize)); + return new LinkedList<>(genreResponseParser.newTrend(JsonResponse, currentYear)); } }