diff --git a/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java b/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java index d485ccf..4f22807 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java @@ -1,5 +1,24 @@ package com.ajou.hertz.domain.instrument.controller; +import static com.ajou.hertz.common.constant.GlobalConstants.API_VERSION_HEADER_NAME; + +import java.net.URI; + +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.data.domain.Page; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import com.ajou.hertz.common.auth.UserPrincipal; import com.ajou.hertz.domain.instrument.acoustic_and_classic_guitar.dto.AcousticAndClassicGuitarDto; import com.ajou.hertz.domain.instrument.acoustic_and_classic_guitar.dto.request.AcousticAndClassicGuitarFilterConditions; @@ -38,6 +57,7 @@ import com.ajou.hertz.domain.instrument.mapper.InstrumentMapper; import com.ajou.hertz.domain.instrument.service.InstrumentCommandService; import com.ajou.hertz.domain.instrument.service.InstrumentQueryService; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -47,16 +67,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.data.domain.Page; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; - -import java.net.URI; - -import static com.ajou.hertz.common.constant.GlobalConstants.API_VERSION_HEADER_NAME; @Tag(name = "중고 악기 관련 API") @RequiredArgsConstructor @@ -129,10 +139,14 @@ public Page findElectricGuitarsV1( @Parameter( description = "정렬 기준" ) @RequestParam InstrumentSortOption sort, - @ParameterObject @Valid @ModelAttribute ElectricGuitarFilterConditions filterConditions + @ParameterObject @Valid @ModelAttribute ElectricGuitarFilterConditions filterConditions, + @Parameter( + description = "검색 키워드(검색어)", + example = "펜더" + ) @RequestParam(required = false) String searchKeyword ) { return instrumentQueryService - .findElectricGuitarDtos(page, size, sort, filterConditions) + .findElectricGuitarDtos(page, size, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toElectricGuitarResponse); } @@ -153,10 +167,14 @@ public Page findBassGuitarsV1( @Parameter( description = "정렬 기준" ) @RequestParam InstrumentSortOption sort, - @ParameterObject @Valid @ModelAttribute BassGuitarFilterConditions filterConditions + @ParameterObject @Valid @ModelAttribute BassGuitarFilterConditions filterConditions, + @Parameter( + description = "검색 키워드(검색어)", + example = "펜더" + ) @RequestParam(required = false) String searchKeyword ) { return instrumentQueryService - .findBassGuitarDtos(page, size, sort, filterConditions) + .findBassGuitarDtos(page, size, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toBassGuitarResponse); } @@ -177,10 +195,14 @@ public Page findAcousticAndClassicGuitarsV1( @Parameter( description = "정렬 기준" ) @RequestParam InstrumentSortOption sort, - @ParameterObject @Valid @ModelAttribute AcousticAndClassicGuitarFilterConditions filterConditions + @ParameterObject @Valid @ModelAttribute AcousticAndClassicGuitarFilterConditions filterConditions, + @Parameter( + description = "검색 키워드(검색어)", + example = "펜더" + ) @RequestParam(required = false) String searchKeyword ) { return instrumentQueryService - .findAcousticAndClassicGuitarDtos(page, size, sort, filterConditions) + .findAcousticAndClassicGuitarDtos(page, size, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toAcousticAndClassicGuitarResponse); } @@ -201,10 +223,14 @@ public Page findEffectorsV1( @Parameter( description = "정렬 기준" ) @RequestParam InstrumentSortOption sort, - @ParameterObject @Valid @ModelAttribute EffectorFilterConditions filterConditions + @ParameterObject @Valid @ModelAttribute EffectorFilterConditions filterConditions, + @Parameter( + description = "검색 키워드(검색어)", + example = "펜더" + ) @RequestParam(required = false) String searchKeyword ) { return instrumentQueryService - .findEffectorDtos(page, size, sort, filterConditions) + .findEffectorDtos(page, size, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toEffectorResponse); } @@ -225,10 +251,14 @@ public Page findAmplifiersV1( @Parameter( description = "정렬 기준" ) @RequestParam InstrumentSortOption sort, - @ParameterObject @Valid @ModelAttribute AmplifierFilterConditions filterConditions + @ParameterObject @Valid @ModelAttribute AmplifierFilterConditions filterConditions, + @Parameter( + description = "검색 키워드(검색어)", + example = "펜더" + ) @RequestParam(required = false) String searchKeyword ) { return instrumentQueryService - .findAmplifierDtos(page, size, sort, filterConditions) + .findAmplifierDtos(page, size, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toAmplifierResponse); } @@ -249,10 +279,14 @@ public Page findAudioEquipmentsV1( @Parameter( description = "정렬 기준" ) @RequestParam InstrumentSortOption sort, - @ParameterObject @Valid @ModelAttribute AudioEquipmentFilterConditions filterConditions + @ParameterObject @Valid @ModelAttribute AudioEquipmentFilterConditions filterConditions, + @Parameter( + description = "검색 키워드(검색어)", + example = "펜더" + ) @RequestParam(required = false) String searchKeyword ) { return instrumentQueryService - .findAudioEquipmentDtos(page, size, sort, filterConditions) + .findAudioEquipmentDtos(page, size, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toAudioEquipmentResponse); } diff --git a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java index e7f0d85..ba6bcf3 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java @@ -33,26 +33,26 @@ public interface InstrumentRepositoryCustom { Optional findAudioEquipmentById(Long id); Page findElectricGuitars( - int page, int pageSize, InstrumentSortOption sort, ElectricGuitarFilterConditions filterConditions + int page, int pageSize, InstrumentSortOption sort, ElectricGuitarFilterConditions filterConditions, String searchKeyword ); Page findBassGuitars( - int page, int pageSize, InstrumentSortOption sort, BassGuitarFilterConditions filterConditions + int page, int pageSize, InstrumentSortOption sort, BassGuitarFilterConditions filterConditions, String searchKeyword ); Page findAcousticAndClassicGuitars( - int page, int pageSize, InstrumentSortOption sort, AcousticAndClassicGuitarFilterConditions filterConditions + int page, int pageSize, InstrumentSortOption sort, AcousticAndClassicGuitarFilterConditions filterConditions, String searchKeyword ); Page findEffectors( - int page, int pageSize, InstrumentSortOption sort, EffectorFilterConditions filterConditions + int page, int pageSize, InstrumentSortOption sort, EffectorFilterConditions filterConditions, String searchKeyword ); Page findAmplifiers( - int page, int pageSize, InstrumentSortOption sort, AmplifierFilterConditions filterConditions + int page, int pageSize, InstrumentSortOption sort, AmplifierFilterConditions filterConditions, String searchKeyword ); Page findAudioEquipments( - int page, int pageSize, InstrumentSortOption sort, AudioEquipmentFilterConditions filterConditions + int page, int pageSize, InstrumentSortOption sort, AudioEquipmentFilterConditions filterConditions, String searchKeyword ); } diff --git a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java index d3fa580..27d66b3 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java @@ -1,12 +1,12 @@ package com.ajou.hertz.domain.instrument.repository; -import static com.ajou.hertz.domain.instrument.acoustic_and_classic_guitar.entity.QAcousticAndClassicGuitar.*; -import static com.ajou.hertz.domain.instrument.amplifier.entity.QAmplifier.*; -import static com.ajou.hertz.domain.instrument.audio_equipment.entity.QAudioEquipment.*; -import static com.ajou.hertz.domain.instrument.bass_guitar.entity.QBassGuitar.*; -import static com.ajou.hertz.domain.instrument.effector.entity.QEffector.*; -import static com.ajou.hertz.domain.instrument.electric_guitar.entity.QElectricGuitar.*; -import static com.ajou.hertz.domain.user.entity.QUser.*; +import static com.ajou.hertz.domain.instrument.acoustic_and_classic_guitar.entity.QAcousticAndClassicGuitar.acousticAndClassicGuitar; +import static com.ajou.hertz.domain.instrument.amplifier.entity.QAmplifier.amplifier; +import static com.ajou.hertz.domain.instrument.audio_equipment.entity.QAudioEquipment.audioEquipment; +import static com.ajou.hertz.domain.instrument.bass_guitar.entity.QBassGuitar.bassGuitar; +import static com.ajou.hertz.domain.instrument.effector.entity.QEffector.effector; +import static com.ajou.hertz.domain.instrument.electric_guitar.entity.QElectricGuitar.electricGuitar; +import static com.ajou.hertz.domain.user.entity.QUser.user; import java.util.ArrayList; import java.util.List; @@ -17,6 +17,8 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.lang.Nullable; +import org.springframework.util.StringUtils; import com.ajou.hertz.domain.instrument.acoustic_and_classic_guitar.dto.request.AcousticAndClassicGuitarFilterConditions; import com.ajou.hertz.domain.instrument.acoustic_and_classic_guitar.entity.AcousticAndClassicGuitar; @@ -92,67 +94,91 @@ public Optional findAudioEquipmentById(Long id) { @Override public Page findElectricGuitars( int page, int pageSize, InstrumentSortOption sort, - ElectricGuitarFilterConditions filterConditions + ElectricGuitarFilterConditions filterConditions, + @Nullable String searchKeyword ) { return findInstruments( - page, pageSize, sort, filterConditions, electricGuitar, electricGuitar.seller, - this::mapInstrumentFilterConditionsToPredicates - ); + page, pageSize, sort, + filterConditions, + electricGuitar, + electricGuitar.seller, + conditions -> this.convertInstrumentFilterAndSearchConditionsToPredicates(conditions, searchKeyword) + ); } @Override public Page findBassGuitars( int page, int pageSize, InstrumentSortOption sort, - BassGuitarFilterConditions filterConditions + BassGuitarFilterConditions filterConditions, + @Nullable String searchKeyword ) { return findInstruments( - page, pageSize, sort, filterConditions, bassGuitar, bassGuitar.seller, - this::mapInstrumentFilterConditionsToPredicates - ); + page, pageSize, sort, + filterConditions, + bassGuitar, + bassGuitar.seller, + conditions -> this.convertInstrumentFilterAndSearchConditionsToPredicates(conditions, searchKeyword) + ); } @Override public Page findAcousticAndClassicGuitars( int page, int pageSize, InstrumentSortOption sort, - AcousticAndClassicGuitarFilterConditions filterConditions + AcousticAndClassicGuitarFilterConditions filterConditions, + @Nullable String searchKeyword ) { return findInstruments( - page, pageSize, sort, filterConditions, acousticAndClassicGuitar, acousticAndClassicGuitar.seller, - this::mapInstrumentFilterConditionsToPredicates - ); + page, pageSize, sort, + filterConditions, + acousticAndClassicGuitar, + acousticAndClassicGuitar.seller, + conditions -> this.convertInstrumentFilterAndSearchConditionsToPredicates(conditions, searchKeyword) + ); } @Override public Page findEffectors( int page, int pageSize, InstrumentSortOption sort, - EffectorFilterConditions filterConditions + EffectorFilterConditions filterConditions, + @Nullable String searchKeyword ) { return findInstruments( - page, pageSize, sort, filterConditions, effector, effector.seller, - this::mapInstrumentFilterConditionsToPredicates - ); + page, pageSize, sort, + filterConditions, + effector, + effector.seller, + conditions -> this.convertInstrumentFilterAndSearchConditionsToPredicates(conditions, searchKeyword) + ); } @Override public Page findAmplifiers( int page, int pageSize, InstrumentSortOption sort, - AmplifierFilterConditions filterConditions + AmplifierFilterConditions filterConditions, + @Nullable String searchKeyword ) { return findInstruments( - page, pageSize, sort, filterConditions, amplifier, amplifier.seller, - this::mapInstrumentFilterConditionsToPredicates - ); + page, pageSize, sort, + filterConditions, + amplifier, + amplifier.seller, + conditions -> this.convertInstrumentFilterAndSearchConditionsToPredicates(conditions, searchKeyword) + ); } @Override public Page findAudioEquipments( int page, int pageSize, InstrumentSortOption sort, - AudioEquipmentFilterConditions filterConditions + AudioEquipmentFilterConditions filterConditions, + @Nullable String searchKeyword ) { return findInstruments( - page, pageSize, sort, filterConditions, audioEquipment, audioEquipment.seller, - this::mapInstrumentFilterConditionsToPredicates - ); + page, pageSize, sort, + filterConditions, + audioEquipment, + audioEquipment.seller, + conditions -> this.convertInstrumentFilterAndSearchConditionsToPredicates(conditions, searchKeyword) + ); } private Optional findInstrumentById( @@ -216,25 +242,45 @@ private OrderSpecifier[] convertSortToOrderSpecifiers( )).toArray(OrderSpecifier[]::new); } - private List mapInstrumentFilterConditionsToPredicates( + private List convertInstrumentFilterAndSearchConditionsToPredicates( InstrumentFilterConditions filterConditions, - EnumPath progressStatusEntityPath, - StringPath tradeAddressSidoExpression, - StringPath tradeAddressSggExpression + @Nullable String searchKeyword, + EnumPath progressStatusPath, + StringPath titlePath, + StringPath tradeAddressSidoPath, + StringPath tradeAddressSggPath, + StringPath tradeAddressEmdPath + ) { + List res = new ArrayList<>(); + + // Filtering + res.add(createEqualCondition(filterConditions.getProgress(), progressStatusPath)); + res.add(createEqualCondition(filterConditions.getSido(), tradeAddressSidoPath)); + res.add(createEqualCondition(filterConditions.getSgg(), tradeAddressSggPath)); + + // Searching + if (StringUtils.hasText(searchKeyword)) { + res.add(titlePath.containsIgnoreCase(searchKeyword)); + res.add(tradeAddressSidoPath.containsIgnoreCase(searchKeyword)); + res.add(tradeAddressSggPath.containsIgnoreCase(searchKeyword)); + res.add(tradeAddressEmdPath.containsIgnoreCase(searchKeyword)); + } + + return res; + } + + private List convertInstrumentFilterAndSearchConditionsToPredicates( + ElectricGuitarFilterConditions filterConditions, + @Nullable String searchKeyword ) { - List res = new ArrayList<>(); - res.add(createEqualCondition(filterConditions.getProgress(), progressStatusEntityPath)); - res.add(createEqualCondition(filterConditions.getSido(), tradeAddressSidoExpression)); - res.add(createEqualCondition(filterConditions.getSgg(), tradeAddressSggExpression)); - return res; - } - - private List mapInstrumentFilterConditionsToPredicates(ElectricGuitarFilterConditions filterConditions) { - List res = mapInstrumentFilterConditionsToPredicates( + List res = convertInstrumentFilterAndSearchConditionsToPredicates( filterConditions, + searchKeyword, electricGuitar.progressStatus, + electricGuitar.title, electricGuitar.tradeAddress.sido, - electricGuitar.tradeAddress.sgg + electricGuitar.tradeAddress.sgg, + electricGuitar.tradeAddress.emd ); res.add(createEqualCondition(filterConditions.getBrand(), electricGuitar.brand)); res.add(createEqualCondition(filterConditions.getModel(), electricGuitar.model)); @@ -242,12 +288,18 @@ private List mapInstrumentFilterConditionsToPredicates(ElectricGuitar return res; } - private List mapInstrumentFilterConditionsToPredicates(BassGuitarFilterConditions filterConditions) { - List res = mapInstrumentFilterConditionsToPredicates( + private List convertInstrumentFilterAndSearchConditionsToPredicates( + BassGuitarFilterConditions filterConditions, + @Nullable String searchKeyword + ) { + List res = convertInstrumentFilterAndSearchConditionsToPredicates( filterConditions, + searchKeyword, bassGuitar.progressStatus, + bassGuitar.title, bassGuitar.tradeAddress.sido, - bassGuitar.tradeAddress.sgg + bassGuitar.tradeAddress.sgg, + bassGuitar.tradeAddress.emd ); res.add(createEqualCondition(filterConditions.getBrand(), bassGuitar.brand)); res.add(createEqualCondition(filterConditions.getPickUp(), bassGuitar.pickUp)); @@ -256,13 +308,18 @@ private List mapInstrumentFilterConditionsToPredicates(BassGuitarFilt return res; } - private List mapInstrumentFilterConditionsToPredicates( - AcousticAndClassicGuitarFilterConditions filterConditions) { - List res = mapInstrumentFilterConditionsToPredicates( + private List convertInstrumentFilterAndSearchConditionsToPredicates( + AcousticAndClassicGuitarFilterConditions filterConditions, + @Nullable String searchKeyword + ) { + List res = convertInstrumentFilterAndSearchConditionsToPredicates( filterConditions, + searchKeyword, acousticAndClassicGuitar.progressStatus, + acousticAndClassicGuitar.title, acousticAndClassicGuitar.tradeAddress.sido, - acousticAndClassicGuitar.tradeAddress.sgg + acousticAndClassicGuitar.tradeAddress.sgg, + acousticAndClassicGuitar.tradeAddress.emd ); res.add(createEqualCondition(filterConditions.getBrand(), acousticAndClassicGuitar.brand)); res.add(createEqualCondition(filterConditions.getModel(), acousticAndClassicGuitar.model)); @@ -271,24 +328,36 @@ private List mapInstrumentFilterConditionsToPredicates( return res; } - private List mapInstrumentFilterConditionsToPredicates(EffectorFilterConditions filterConditions) { - List res = mapInstrumentFilterConditionsToPredicates( + private List convertInstrumentFilterAndSearchConditionsToPredicates( + EffectorFilterConditions filterConditions, + @Nullable String searchKeyword + ) { + List res = convertInstrumentFilterAndSearchConditionsToPredicates( filterConditions, + searchKeyword, effector.progressStatus, + effector.title, effector.tradeAddress.sido, - effector.tradeAddress.sgg + effector.tradeAddress.sgg, + effector.tradeAddress.emd ); res.add(createEqualCondition(filterConditions.getType(), effector.type)); res.add(createEqualCondition(filterConditions.getFeature(), effector.feature)); return res; } - private List mapInstrumentFilterConditionsToPredicates(AmplifierFilterConditions filterConditions) { - List res = mapInstrumentFilterConditionsToPredicates( + private List convertInstrumentFilterAndSearchConditionsToPredicates( + AmplifierFilterConditions filterConditions, + @Nullable String searchKeyword + ) { + List res = convertInstrumentFilterAndSearchConditionsToPredicates( filterConditions, + searchKeyword, amplifier.progressStatus, + amplifier.title, amplifier.tradeAddress.sido, - amplifier.tradeAddress.sgg + amplifier.tradeAddress.sgg, + amplifier.tradeAddress.emd ); res.add(createEqualCondition(filterConditions.getType(), amplifier.type)); res.add(createEqualCondition(filterConditions.getBrand(), amplifier.brand)); @@ -296,12 +365,18 @@ private List mapInstrumentFilterConditionsToPredicates(AmplifierFilte return res; } - private List mapInstrumentFilterConditionsToPredicates(AudioEquipmentFilterConditions filterConditions) { - List res = mapInstrumentFilterConditionsToPredicates( + private List convertInstrumentFilterAndSearchConditionsToPredicates( + AudioEquipmentFilterConditions filterConditions, + @Nullable String searchKeyword + ) { + List res = convertInstrumentFilterAndSearchConditionsToPredicates( filterConditions, + searchKeyword, audioEquipment.progressStatus, + audioEquipment.title, audioEquipment.tradeAddress.sido, - audioEquipment.tradeAddress.sgg + audioEquipment.tradeAddress.sgg, + audioEquipment.tradeAddress.emd ); res.add(createEqualCondition(filterConditions.getType(), audioEquipment.type)); return res; diff --git a/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java b/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java index dd72e3e..d2c1201 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java @@ -91,16 +91,18 @@ public Page findInstrumentDtos(int page, int pageSize, Instrument * @param page 페이지 번호 * @param pageSize 페이지 크기 * @param sort 정렬 기준 + * @param searchKeyword 검색 키워드 * @return 조회된 일렉 기타 dto 목록 */ public Page findElectricGuitarDtos( int page, int pageSize, InstrumentSortOption sort, - ElectricGuitarFilterConditions filterConditions + ElectricGuitarFilterConditions filterConditions, + String searchKeyword ) { return instrumentRepository - .findElectricGuitars(page, pageSize, sort, filterConditions) + .findElectricGuitars(page, pageSize, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toElectricGuitarDto); } @@ -110,35 +112,39 @@ public Page findElectricGuitarDtos( * @param page 페이지 번호 * @param pageSize 페이지 크기 * @param sort 정렬 기준 + * @param searchKeyword 검색 키워드 * @return 조회된 베이스 기타 dto 목록 */ public Page findBassGuitarDtos( int page, int pageSize, InstrumentSortOption sort, - BassGuitarFilterConditions filterConditions + BassGuitarFilterConditions filterConditions, + String searchKeyword ) { return instrumentRepository - .findBassGuitars(page, pageSize, sort, filterConditions) + .findBassGuitars(page, pageSize, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toBassGuitarDto); } - /** - * 어쿠스틱&클래식 기타 목록을 조회한다. - * - * @param page 페이지 번호 - * @param pageSize 페이지 크기 - * @param sort 정렬 기준 - * @return 조회된 어쿠스틱&클래식 기타 dto 목록 - */ - public Page findAcousticAndClassicGuitarDtos( - int page, + /** + * 어쿠스틱&클래식 기타 목록을 조회한다. + * + * @param page 페이지 번호 + * @param pageSize 페이지 크기 + * @param sort 정렬 기준 + * @param searchKeyword 검색 키워드 + * @return 조회된 어쿠스틱&클래식 기타 dto 목록 + */ + public Page findAcousticAndClassicGuitarDtos( + int page, int pageSize, InstrumentSortOption sort, - AcousticAndClassicGuitarFilterConditions filterConditions + AcousticAndClassicGuitarFilterConditions filterConditions, + String searchKeyword ) { return instrumentRepository - .findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions) + .findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toAcousticAndClassicGuitarDto); } @@ -148,16 +154,18 @@ public Page findAcousticAndClassicGuitarDtos( * @param page 페이지 번호 * @param pageSize 페이지 크기 * @param sort 정렬 기준 + * @param searchKeyword 검색 키워드 * @return 조회된 이펙터 dto 목록 */ public Page findEffectorDtos( int page, int pageSize, InstrumentSortOption sort, - EffectorFilterConditions filterConditions + EffectorFilterConditions filterConditions, + String searchKeyword ) { return instrumentRepository - .findEffectors(page, pageSize, sort, filterConditions) + .findEffectors(page, pageSize, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toEffectorDto); } @@ -165,18 +173,20 @@ public Page findEffectorDtos( * 앰프 목록을 조회한다. * * @param page 페이지 번호 - * @param pageSize 페이지 크기 - * @param sort 정렬 기준 + * @param pageSize 페이지 크기 + * @param sort 정렬 기준 + * @param searchKeyword 검색 키워드 * @return 조회된 앰프 dto 목록 */ public Page findAmplifierDtos( int page, int pageSize, InstrumentSortOption sort, - AmplifierFilterConditions filterConditions + AmplifierFilterConditions filterConditions, + String searchKeyword ) { return instrumentRepository - .findAmplifiers(page, pageSize, sort, filterConditions) + .findAmplifiers(page, pageSize, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toAmplifierDto); } @@ -186,16 +196,18 @@ public Page findAmplifierDtos( * @param page 페이지 번호 * @param pageSize 페이지 크기 * @param sort 정렬 기준 + * @param searchKeyword 검색 키워드 * @return 조회된 음향 장비 dto 목록 */ public Page findAudioEquipmentDtos( int page, int pageSize, InstrumentSortOption sort, - AudioEquipmentFilterConditions filterConditions + AudioEquipmentFilterConditions filterConditions, + String searchKeyword ) { return instrumentRepository - .findAudioEquipments(page, pageSize, sort, filterConditions) + .findAudioEquipments(page, pageSize, sort, filterConditions, searchKeyword) .map(InstrumentMapper::toAmplifierDto); } diff --git a/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java b/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java index 38d39f8..c3f3403 100644 --- a/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java +++ b/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java @@ -1,6 +1,6 @@ package com.ajou.hertz.integration.domain.instrument.repository; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDate; import java.util.List; @@ -237,7 +237,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findElectricGuitars(0, 10, sortOption, filterConditions); + Page result = sut.findElectricGuitars(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -273,7 +273,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findElectricGuitars(0, 10, sortOption, filterConditions); + Page result = sut.findElectricGuitars(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(1); @@ -292,7 +292,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findBassGuitars(0, 10, sortOption, filterConditions); + Page result = sut.findBassGuitars(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -312,7 +312,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findAcousticAndClassicGuitars(0, 10, sortOption, filterConditions); + Page result = sut.findAcousticAndClassicGuitars(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -331,7 +331,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findEffectors(0, 10, sortOption, filterConditions); + Page result = sut.findEffectors(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -350,7 +350,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findAmplifiers(0, 10, sortOption, filterConditions); + Page result = sut.findAmplifiers(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -369,7 +369,7 @@ public InstrumentRepositoryTest( )); // when - Page result = sut.findAudioEquipments(0, 10, sortOption, filterConditions); + Page result = sut.findAudioEquipments(0, 10, sortOption, filterConditions, null); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); diff --git a/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java b/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java index dca60ce..3e38315 100644 --- a/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java +++ b/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java @@ -1,11 +1,18 @@ package com.ajou.hertz.unit.domain.instrument.controller; -import static com.ajou.hertz.common.constant.GlobalConstants.*; -import static org.hamcrest.collection.IsCollectionWithSize.*; -import static org.mockito.BDDMockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static com.ajou.hertz.common.constant.GlobalConstants.API_VERSION_HEADER_NAME; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.mockito.BDDMockito.willDoNothing; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.time.LocalDate; import java.time.LocalDateTime; @@ -170,7 +177,11 @@ public InstrumentControllerTest(MockMvc mvc) { createElectricGuitarDto(4L, userId) )); given(instrumentQueryService.findElectricGuitarDtos( - eq(page), eq(pageSize), eq(sortOption), any(ElectricGuitarFilterConditions.class) + eq(page), + eq(pageSize), + eq(sortOption), + any(ElectricGuitarFilterConditions.class), + eq(null) )).willReturn(expectedResult); // when & then @@ -193,7 +204,7 @@ public InstrumentControllerTest(MockMvc mvc) { .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); then(instrumentQueryService) .should() - .findElectricGuitarDtos(eq(page), eq(pageSize), eq(sortOption), any(ElectricGuitarFilterConditions.class)); + .findElectricGuitarDtos(eq(page), eq(pageSize), eq(sortOption), any(ElectricGuitarFilterConditions.class), eq(null)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -211,7 +222,11 @@ public InstrumentControllerTest(MockMvc mvc) { createBassGuitarDto(4L, userId) )); given(instrumentQueryService.findBassGuitarDtos( - eq(page), eq(pageSize), eq(sortOption), any(BassGuitarFilterConditions.class) + eq(page), + eq(pageSize), + eq(sortOption), + any(BassGuitarFilterConditions.class), + eq(null) )).willReturn(expectedResult); // when & then @@ -235,7 +250,7 @@ public InstrumentControllerTest(MockMvc mvc) { .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); then(instrumentQueryService) .should() - .findBassGuitarDtos(eq(page), eq(pageSize), eq(sortOption), any(BassGuitarFilterConditions.class)); + .findBassGuitarDtos(eq(page), eq(pageSize), eq(sortOption), any(BassGuitarFilterConditions.class), eq(null)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -253,7 +268,11 @@ public InstrumentControllerTest(MockMvc mvc) { createAcousticAndClassicGuitarDto(4L, userId) )); given(instrumentQueryService.findAcousticAndClassicGuitarDtos( - eq(page), eq(pageSize), eq(sortOption), any(AcousticAndClassicGuitarFilterConditions.class) + eq(page), + eq(pageSize), + eq(sortOption), + any(AcousticAndClassicGuitarFilterConditions.class), + eq(null) )).willReturn(expectedResult); // when & then @@ -278,7 +297,8 @@ public InstrumentControllerTest(MockMvc mvc) { then(instrumentQueryService) .should() .findAcousticAndClassicGuitarDtos( - eq(page), eq(pageSize), eq(sortOption), any(AcousticAndClassicGuitarFilterConditions.class) + eq(page), eq(pageSize), eq(sortOption), + any(AcousticAndClassicGuitarFilterConditions.class), eq(null) ); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -297,7 +317,11 @@ public InstrumentControllerTest(MockMvc mvc) { createEffectorDto(4L, userId) )); given(instrumentQueryService.findEffectorDtos( - eq(page), eq(pageSize), eq(sortOption), any(EffectorFilterConditions.class) + eq(page), + eq(pageSize), + eq(sortOption), + any(EffectorFilterConditions.class), + eq(null) )).willReturn(expectedResult); // when & then @@ -319,7 +343,7 @@ public InstrumentControllerTest(MockMvc mvc) { .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); then(instrumentQueryService) .should() - .findEffectorDtos(eq(page), eq(pageSize), eq(sortOption), any(EffectorFilterConditions.class)); + .findEffectorDtos(eq(page), eq(pageSize), eq(sortOption), any(EffectorFilterConditions.class), eq(null)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -337,7 +361,11 @@ public InstrumentControllerTest(MockMvc mvc) { createAmplifierDto(4L, userId) )); given(instrumentQueryService.findAmplifierDtos( - eq(page), eq(pageSize), eq(sortOption), any(AmplifierFilterConditions.class) + eq(page), + eq(pageSize), + eq(sortOption), + any(AmplifierFilterConditions.class), + eq(null) )).willReturn(expectedResult); // when & then @@ -360,7 +388,7 @@ public InstrumentControllerTest(MockMvc mvc) { .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); then(instrumentQueryService) .should() - .findAmplifierDtos(eq(page), eq(pageSize), eq(sortOption), any(AmplifierFilterConditions.class)); + .findAmplifierDtos(eq(page), eq(pageSize), eq(sortOption), any(AmplifierFilterConditions.class), eq(null)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -378,7 +406,11 @@ public InstrumentControllerTest(MockMvc mvc) { createAudioEquipmentDto(4L, userId) )); given(instrumentQueryService.findAudioEquipmentDtos( - eq(page), eq(pageSize), eq(sortOption), any(AudioEquipmentFilterConditions.class) + eq(page), + eq(pageSize), + eq(sortOption), + any(AudioEquipmentFilterConditions.class), + eq(null) )).willReturn(expectedResult); // when & then @@ -399,7 +431,7 @@ public InstrumentControllerTest(MockMvc mvc) { .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); then(instrumentQueryService) .should() - .findAudioEquipmentDtos(eq(page), eq(pageSize), eq(sortOption), any(AudioEquipmentFilterConditions.class)); + .findAudioEquipmentDtos(eq(page), eq(pageSize), eq(sortOption), any(AudioEquipmentFilterConditions.class), eq(null)); verifyEveryMocksShouldHaveNoMoreInteractions(); } diff --git a/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java b/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java index 2331804..62900b6 100644 --- a/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java +++ b/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java @@ -1,8 +1,11 @@ package com.ajou.hertz.unit.domain.instrument.service; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.BDDMockito.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; +import static org.junit.jupiter.api.Assertions.assertIterableEquals; +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; import java.time.LocalDate; import java.util.ArrayList; @@ -206,14 +209,14 @@ class InstrumentQueryServiceTest { createElectricGuitar(2L, user), createElectricGuitar(3L, user) )); - given(instrumentRepository.findElectricGuitars(page, pageSize, sort, filterConditions)) + given(instrumentRepository.findElectricGuitars(page, pageSize, sort, filterConditions, null)) .willReturn(expectedResult); // when - Page actualResult = sut.findElectricGuitarDtos(page, pageSize, sort, filterConditions); + Page actualResult = sut.findElectricGuitarDtos(page, pageSize, sort, filterConditions, null); // then - then(instrumentRepository).should().findElectricGuitars(page, pageSize, sort, filterConditions); + then(instrumentRepository).should().findElectricGuitars(page, pageSize, sort, filterConditions, null); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -235,13 +238,13 @@ class InstrumentQueryServiceTest { createBassGuitar(2L, user), createBassGuitar(3L, user) )); - given(instrumentRepository.findBassGuitars(page, pageSize, sort, filterConditions)).willReturn(expectedResult); + given(instrumentRepository.findBassGuitars(page, pageSize, sort, filterConditions, null)).willReturn(expectedResult); // when - Page actualResult = sut.findBassGuitarDtos(page, pageSize, sort, filterConditions); + Page actualResult = sut.findBassGuitarDtos(page, pageSize, sort, filterConditions, null); // then - then(instrumentRepository).should().findBassGuitars(page, pageSize, sort, filterConditions); + then(instrumentRepository).should().findBassGuitars(page, pageSize, sort, filterConditions, null); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -264,15 +267,15 @@ class InstrumentQueryServiceTest { createAcousticAndClassicGuitar(2L, user), createAcousticAndClassicGuitar(3L, user) )); - given(instrumentRepository.findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions)) + given(instrumentRepository.findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions, null)) .willReturn(expectedResult); // when Page actualResult = - sut.findAcousticAndClassicGuitarDtos(page, pageSize, sort, filterConditions); + sut.findAcousticAndClassicGuitarDtos(page, pageSize, sort, filterConditions, null); // then - then(instrumentRepository).should().findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions); + then(instrumentRepository).should().findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions, null); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -294,13 +297,13 @@ class InstrumentQueryServiceTest { createEffector(2L, user), createEffector(3L, user) )); - given(instrumentRepository.findEffectors(page, pageSize, sort, filterConditions)).willReturn(expectedResult); + given(instrumentRepository.findEffectors(page, pageSize, sort, filterConditions, null)).willReturn(expectedResult); // when - Page actualResult = sut.findEffectorDtos(page, pageSize, sort, filterConditions); + Page actualResult = sut.findEffectorDtos(page, pageSize, sort, filterConditions, null); // then - then(instrumentRepository).should().findEffectors(page, pageSize, sort, filterConditions); + then(instrumentRepository).should().findEffectors(page, pageSize, sort, filterConditions, null); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -322,13 +325,13 @@ class InstrumentQueryServiceTest { createAmplifier(2L, user), createAmplifier(3L, user) )); - given(instrumentRepository.findAmplifiers(page, pageSize, sort, filterConditions)).willReturn(expectedResult); + given(instrumentRepository.findAmplifiers(page, pageSize, sort, filterConditions, null)).willReturn(expectedResult); // when - Page actualResult = sut.findAmplifierDtos(page, pageSize, sort, filterConditions); + Page actualResult = sut.findAmplifierDtos(page, pageSize, sort, filterConditions, null); // then - then(instrumentRepository).should().findAmplifiers(page, pageSize, sort, filterConditions); + then(instrumentRepository).should().findAmplifiers(page, pageSize, sort, filterConditions, null); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -350,14 +353,14 @@ class InstrumentQueryServiceTest { createAudioEquipment(2L, user), createAudioEquipment(3L, user) )); - given(instrumentRepository.findAudioEquipments(page, pageSize, sort, filterConditions)) + given(instrumentRepository.findAudioEquipments(page, pageSize, sort, filterConditions, null)) .willReturn(expectedResult); // when - Page actualResult = sut.findAudioEquipmentDtos(page, pageSize, sort, filterConditions); + Page actualResult = sut.findAudioEquipmentDtos(page, pageSize, sort, filterConditions, null); // then - then(instrumentRepository).should().findAudioEquipments(page, pageSize, sort, filterConditions); + then(instrumentRepository).should().findAudioEquipments(page, pageSize, sort, filterConditions, null); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals(