diff --git a/build.gradle b/build.gradle index 03358b3..995d208 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' //swaggerDoc - implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0' //s3 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' diff --git a/src/main/java/muit/backend/apiPayLoad/exception/ExceptionAdvice.java b/src/main/java/muit/backend/apiPayLoad/exception/ExceptionAdvice.java index 2c1d144..15ab96a 100644 --- a/src/main/java/muit/backend/apiPayLoad/exception/ExceptionAdvice.java +++ b/src/main/java/muit/backend/apiPayLoad/exception/ExceptionAdvice.java @@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import jakarta.validation.ConstraintViolationException; +import muit.backend.service.CommentService; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; @@ -24,7 +25,7 @@ import java.util.Optional; @Slf4j -//@RestControllerAdvice(annotations = {RestController.class}) +@RestControllerAdvice(annotations = {RestController.class}) public class ExceptionAdvice extends ResponseEntityExceptionHandler { //유효성 검사에서 제약 조건이 위반되었을 때 발생하는 예외 diff --git a/src/main/java/muit/backend/controller/MusicalController.java b/src/main/java/muit/backend/controller/MusicalController.java index 0f5c83f..86cd9fa 100644 --- a/src/main/java/muit/backend/controller/MusicalController.java +++ b/src/main/java/muit/backend/controller/MusicalController.java @@ -1,9 +1,12 @@ package muit.backend.controller; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import lombok.RequiredArgsConstructor; import muit.backend.apiPayLoad.ApiResponse; import muit.backend.dto.musicalDTO.MusicalResponseDTO; +import muit.backend.dto.theatreDTO.TheatreResponseDTO; import muit.backend.service.musicalService.MusicalService; import org.springframework.web.bind.annotation.*; @@ -35,8 +38,9 @@ public ApiResponse getFiveHotMusicals() { @GetMapping("/hot/all") @Operation(summary = "뮤지컬 조회 - 리스트 HOT NOW 전체보기", description = "현재 HOT한 뮤지컬 전체 조회하는 API") - public ApiResponse getAllHotMusicals() { - return ApiResponse.onSuccess(musicalService.getAllHotMusicals()); + @Parameter( name = "page", description = "페이지를 정수로 입력") + public ApiResponse getAllHotMusicals(@RequestParam(defaultValue = "0", name = "page") Integer page) { + return ApiResponse.onSuccess(musicalService.getAllHotMusicals(page)); } @GetMapping("/rank") @@ -47,8 +51,8 @@ public ApiResponse getFiveRankMusicals() @GetMapping("/rank/all") @Operation(summary = "뮤지컬 조회 - 리스트 RANKING 전체보기", description = "RANKING 뮤지컬 전체 조회하는 API") - public ApiResponse getAllRankMusicals() { - return ApiResponse.onSuccess(musicalService.getAllHotMusicals()); + public ApiResponse getAllRankMusicals(@RequestParam(defaultValue = "0", name = "page") Integer page) { + return ApiResponse.onSuccess(musicalService.getAllHotMusicals(page)); } @GetMapping("/open") @@ -59,7 +63,16 @@ public ApiResponse getFiveOpenMusicals() @GetMapping("/open/all") @Operation(summary = "뮤지컬 조회 - 리스트 TICKET OPEN 전체보기", description = "오늘 이후 티켓 오픈하는 뮤지컬 전체 조회하는 API") - public ApiResponse getAllOpenMusicals() { - return ApiResponse.onSuccess(musicalService.getAllOpenMusicals()); + public ApiResponse getAllOpenMusicals(@RequestParam(defaultValue = "0", name = "page") Integer page) { + return ApiResponse.onSuccess(musicalService.getAllOpenMusicals(page)); + } + + @GetMapping("") + @Operation(summary = "뮤지컬 검색", description = "상단바에서 뮤지컬을 검색하는 API 입니다.") + @Parameters({ + @Parameter(name = "musicalName", description = "뮤지컬 이름을 검색어로 입력") + }) + public ApiResponse searchMusicals(@RequestParam("musicalName") String musicalName) { + return ApiResponse.onSuccess(musicalService.findMusicalsByName(musicalName)); } } diff --git a/src/main/java/muit/backend/controller/TheatreController.java b/src/main/java/muit/backend/controller/TheatreController.java index 0050cf1..86bd3a3 100644 --- a/src/main/java/muit/backend/controller/TheatreController.java +++ b/src/main/java/muit/backend/controller/TheatreController.java @@ -18,12 +18,12 @@ public class TheatreController { private final TheatreService theatreService; @GetMapping ("/") - @Operation(summary = "공연장 조회", description = "시야확인에서 공연장을 검색하는 API 입니다.") + @Operation(summary = "공연장 검색", description = "시야확인에서 공연장을 검색하는 API 입니다.") @Parameters({ @Parameter(name = "theatreName", description = "공연장 이름을 검색어로 입력") }) - public ApiResponse getTheatre(@RequestParam("theatreName") String theatreName) { - return ApiResponse.onSuccess(theatreService.getTheatre(theatreName)); + public ApiResponse getTheatre(@RequestParam("theatreName") String theatreName) { + return ApiResponse.onSuccess(theatreService.findTheatreByName(theatreName)); } @GetMapping ("/{theatreId}") diff --git a/src/main/java/muit/backend/converter/TheatreConverter.java b/src/main/java/muit/backend/converter/TheatreConverter.java index 52ec379..adfda8f 100644 --- a/src/main/java/muit/backend/converter/TheatreConverter.java +++ b/src/main/java/muit/backend/converter/TheatreConverter.java @@ -11,7 +11,9 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; public class TheatreConverter { //DTO -> Entity @@ -34,6 +36,16 @@ public static TheatreResponseDTO.TheatreResultDTO toTheatreResultDTO(Theatre the .build(); } + public static TheatreResponseDTO.TheatreResultListDTO toTheatreResultListDTO(List theatres) { + + List theatreResultsDTO = theatres.stream() + .map(TheatreConverter::toTheatreResultDTO).toList(); + + return TheatreResponseDTO.TheatreResultListDTO.builder() + .theatreResults(theatreResultsDTO) + .build(); + } + public static TheatreRequestDTO.TheatreCreateDTO convertKopisDTOToTheatreCreateDTO(KopisTheatreResponseDTO.KopisTheatreDTO kopisTheatreDTO) { return TheatreRequestDTO.TheatreCreateDTO.builder() .name(kopisTheatreDTO.getFcltynm()) diff --git a/src/main/java/muit/backend/dto/theatreDTO/TheatreResponseDTO.java b/src/main/java/muit/backend/dto/theatreDTO/TheatreResponseDTO.java index 66a19e8..654907f 100644 --- a/src/main/java/muit/backend/dto/theatreDTO/TheatreResponseDTO.java +++ b/src/main/java/muit/backend/dto/theatreDTO/TheatreResponseDTO.java @@ -8,6 +8,8 @@ import muit.backend.domain.enums.PostType; import muit.backend.domain.enums.SectionType; +import java.util.List; + public class TheatreResponseDTO { @Builder @Getter @@ -19,4 +21,12 @@ public static class TheatreResultDTO{ private String address; private String theatrePic; } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class TheatreResultListDTO{ + private List theatreResults; + } } diff --git a/src/main/java/muit/backend/repository/MusicalRepository.java b/src/main/java/muit/backend/repository/MusicalRepository.java index 3854d12..ae25d25 100644 --- a/src/main/java/muit/backend/repository/MusicalRepository.java +++ b/src/main/java/muit/backend/repository/MusicalRepository.java @@ -12,11 +12,13 @@ @Repository public interface MusicalRepository extends JpaRepository { List findTop5ByOrderByIdAsc(); - List findAllByOrderByIdAsc(); + List findAllByOrderByIdAsc(Pageable pageable); @Query(value = "SELECT * FROM musical m WHERE m.open_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY) ORDER BY m.open_date ASC", nativeQuery = true) List getFiveOpenWithin7Days(Pageable pageable); @Query("SELECT m FROM Musical m WHERE m.openDate > CURRENT_TIMESTAMP ORDER BY m.openDate ASC") - List getAllOpenAfterToday(); + List getAllOpenAfterToday(Pageable pageable); + + List findByNameContaining(String name); } diff --git a/src/main/java/muit/backend/repository/TheatreRepository.java b/src/main/java/muit/backend/repository/TheatreRepository.java index 63bdb38..fd44255 100644 --- a/src/main/java/muit/backend/repository/TheatreRepository.java +++ b/src/main/java/muit/backend/repository/TheatreRepository.java @@ -3,10 +3,11 @@ import muit.backend.domain.entity.musical.Theatre; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface TheatreRepository extends JpaRepository { - Optional findByName(String name); + List findByNameContaining(String name); Optional findAllById(Long theatreId); } diff --git a/src/main/java/muit/backend/service/EventServiceImpl.java b/src/main/java/muit/backend/service/EventServiceImpl.java index 9d4a5d0..ff6bc41 100644 --- a/src/main/java/muit/backend/service/EventServiceImpl.java +++ b/src/main/java/muit/backend/service/EventServiceImpl.java @@ -6,6 +6,7 @@ import muit.backend.dto.eventDTO.EventResponseDTO; import muit.backend.repository.EventRepository; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -40,6 +41,8 @@ public EventResponseDTO.EventGroupListDTO getEventListOrderByEvFrom(LocalDate to .filter(group -> group.stream() // List로 변환된 스트림을 다시 스트림으로 변환 .anyMatch(event -> !event.getEvFrom().isBefore(today))) //evFrom이 today보다 앞선다면의 부정 .collect(Collectors.toList()); // 최종적으로 List>로 변환 + + return EventConverter.toEventGroupListDTO(eventListGroupedByMusicalId); } diff --git a/src/main/java/muit/backend/service/musicalService/MusicalService.java b/src/main/java/muit/backend/service/musicalService/MusicalService.java index a4482ea..12aee05 100644 --- a/src/main/java/muit/backend/service/musicalService/MusicalService.java +++ b/src/main/java/muit/backend/service/musicalService/MusicalService.java @@ -15,9 +15,11 @@ public interface MusicalService { public MusicalResponseDTO.MusicalHomeListDTO getFiveMusicals(); - public MusicalResponseDTO.MusicalHomeListDTO getAllHotMusicals(); + public MusicalResponseDTO.MusicalHomeListDTO getAllHotMusicals(Integer page); public MusicalResponseDTO.MusicalOpenListDTO getFiveOpenMusicals(); - public MusicalResponseDTO.MusicalOpenListDTO getAllOpenMusicals(); + public MusicalResponseDTO.MusicalOpenListDTO getAllOpenMusicals(Integer page); + + public MusicalResponseDTO.MusicalHomeListDTO findMusicalsByName(String musicalName); } diff --git a/src/main/java/muit/backend/service/musicalService/MusicalServiceImpl.java b/src/main/java/muit/backend/service/musicalService/MusicalServiceImpl.java index 42133a5..4d633f1 100644 --- a/src/main/java/muit/backend/service/musicalService/MusicalServiceImpl.java +++ b/src/main/java/muit/backend/service/musicalService/MusicalServiceImpl.java @@ -89,9 +89,9 @@ public MusicalResponseDTO.MusicalHomeListDTO getFiveMusicals(){ } @Override - public MusicalResponseDTO.MusicalHomeListDTO getAllHotMusicals(){ - List musicals = musicalRepository.findAllByOrderByIdAsc(); - + public MusicalResponseDTO.MusicalHomeListDTO getAllHotMusicals(Integer page){ + Pageable pageable = PageRequest.of(page,20); + List musicals = musicalRepository.findAllByOrderByIdAsc(pageable); return MusicalConverter.toMusicalHomeListDTO(musicals); } @@ -104,9 +104,17 @@ public MusicalResponseDTO.MusicalOpenListDTO getFiveOpenMusicals(){ } @Override - public MusicalResponseDTO.MusicalOpenListDTO getAllOpenMusicals(){ - List musicals = musicalRepository.getAllOpenAfterToday(); + public MusicalResponseDTO.MusicalOpenListDTO getAllOpenMusicals(Integer page){ + Pageable pageable = PageRequest.of(page,20); + List musicals = musicalRepository.getAllOpenAfterToday(pageable); return MusicalConverter.toMusicalOpenListDTO(musicals); } + + @Override + public MusicalResponseDTO.MusicalHomeListDTO findMusicalsByName(String musicalName){ + List musicals = musicalRepository.findByNameContaining(musicalName); + + return MusicalConverter.toMusicalHomeListDTO(musicals); + } } diff --git a/src/main/java/muit/backend/service/theatreService/TheatreService.java b/src/main/java/muit/backend/service/theatreService/TheatreService.java index 6943ca8..6e25cb0 100644 --- a/src/main/java/muit/backend/service/theatreService/TheatreService.java +++ b/src/main/java/muit/backend/service/theatreService/TheatreService.java @@ -9,7 +9,7 @@ @Service public interface TheatreService { - public TheatreResponseDTO.TheatreResultDTO getTheatre(String theatreName); + public TheatreResponseDTO.TheatreResultListDTO findTheatreByName(String theatreName); public SectionResponseDTO.SectionResultDTO getSection(Long theatreId, SectionType sectionType); diff --git a/src/main/java/muit/backend/service/theatreService/TheatreServiceImpl.java b/src/main/java/muit/backend/service/theatreService/TheatreServiceImpl.java index 4782188..41b26fa 100644 --- a/src/main/java/muit/backend/service/theatreService/TheatreServiceImpl.java +++ b/src/main/java/muit/backend/service/theatreService/TheatreServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.io.InputStream; +import java.util.List; import java.util.Optional; @Service @@ -33,11 +34,10 @@ public class TheatreServiceImpl implements TheatreService { private final KopisConfig kopisConfig; @Override - public TheatreResponseDTO.TheatreResultDTO getTheatre(String theatreName){ - Theatre theatre = theatreRepository.findByName(theatreName) - .orElseThrow(() -> new RuntimeException("Theatre not found")); + public TheatreResponseDTO.TheatreResultListDTO findTheatreByName(String theatreName){ + List theatre = theatreRepository.findByNameContaining(theatreName); - return TheatreConverter.toTheatreResultDTO(theatre); + return TheatreConverter.toTheatreResultListDTO(theatre); } @Override