diff --git a/src/main/java/umc/codeplay/controller/MemberController.java b/src/main/java/umc/codeplay/controller/MemberController.java index ff383a6..d92b29e 100644 --- a/src/main/java/umc/codeplay/controller/MemberController.java +++ b/src/main/java/umc/codeplay/controller/MemberController.java @@ -1,7 +1,9 @@ package umc.codeplay.controller; +import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @@ -90,17 +92,23 @@ public ApiResponse getByMusicTitle( // 현재 로그인한 사용자 검색 String email = userDetails.getUsername(); + Member member = + memberRepository + .findByEmail(email) + .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); - Optional optionalMember = memberRepository.findByEmail(email); - if (optionalMember.isEmpty()) { - throw new RuntimeException("사용자를 찾을 수 없습니다."); - } - Member member = optionalMember.get(); + List musics = musicRepository.findAllByTitle(musicTitle); + + List harmonyDTOs = new ArrayList<>(); + List trackDTOs = new ArrayList<>(); - Music music = musicRepository.findByTitle(musicTitle); + for (Music music : musics) { + harmonyDTOs.addAll(memberService.getHarmonyByMusicTitle(member, music)); + trackDTOs.addAll(memberService.getTrackByMusicTitle(member, music)); + } MemberResponseDTO.GetAllByMusicTitleDTO results = - memberService.getAllByMusicTitle(member, music); + new MemberResponseDTO.GetAllByMusicTitleDTO(harmonyDTOs, trackDTOs); return ApiResponse.onSuccess(results); } @@ -110,19 +118,21 @@ public ApiResponse getByMusicTitle( public ApiResponse> getHarmonyByMusicTitle( @AuthenticationPrincipal CustomUserDetails userDetails, @RequestParam String musicTitle) { - // 현재 로그인한 사용자 검색 String email = userDetails.getUsername(); + Member member = + memberRepository + .findByEmail(email) + .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); - Optional optionalMember = memberRepository.findByEmail(email); - if (optionalMember.isEmpty()) { - throw new RuntimeException("사용자를 찾을 수 없습니다."); - } - Member member = optionalMember.get(); - - Music music = musicRepository.findByTitle(musicTitle); - + List musics = musicRepository.findAllByTitle(musicTitle); List results = - memberService.getHarmonyByMusicTitle(member, music); + musics.stream() + .flatMap( + music -> + memberService + .getHarmonyByMusicTitle(member, music) + .stream()) + .collect(Collectors.toList()); return ApiResponse.onSuccess(results); } @@ -132,19 +142,18 @@ public ApiResponse> getHarmonyByMusicTit public ApiResponse> getTrackByMusicTitle( @AuthenticationPrincipal CustomUserDetails userDetails, @RequestParam String musicTitle) { - // 현재 로그인한 사용자 검색 String email = userDetails.getUsername(); + Member member = + memberRepository + .findByEmail(email) + .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); - Optional optionalMember = memberRepository.findByEmail(email); - if (optionalMember.isEmpty()) { - throw new RuntimeException("사용자를 찾을 수 없습니다."); - } - Member member = optionalMember.get(); - - Music music = musicRepository.findByTitle(musicTitle); - + List musics = musicRepository.findAllByTitle(musicTitle); List results = - memberService.getTrackByMusicTitle(member, music); + musics.stream() + .flatMap( + music -> memberService.getTrackByMusicTitle(member, music).stream()) + .collect(Collectors.toList()); return ApiResponse.onSuccess(results); } diff --git a/src/main/java/umc/codeplay/repository/MusicRepository.java b/src/main/java/umc/codeplay/repository/MusicRepository.java index 5527abd..b38b646 100644 --- a/src/main/java/umc/codeplay/repository/MusicRepository.java +++ b/src/main/java/umc/codeplay/repository/MusicRepository.java @@ -1,5 +1,7 @@ package umc.codeplay.repository; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import umc.codeplay.domain.Music; @@ -7,4 +9,6 @@ public interface MusicRepository extends JpaRepository { // 제목으로 음원 찾기 Music findByTitle(String title); + + List findAllByTitle(String title); } diff --git a/src/main/java/umc/codeplay/service/MemberService.java b/src/main/java/umc/codeplay/service/MemberService.java index 3362bf2..1b8b3d5 100644 --- a/src/main/java/umc/codeplay/service/MemberService.java +++ b/src/main/java/umc/codeplay/service/MemberService.java @@ -2,6 +2,7 @@ import java.security.InvalidParameterException; import java.security.SecureRandom; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import jakarta.transaction.Transactional; @@ -133,22 +134,16 @@ public List getMyTrack(Member member) { .collect(Collectors.toList()); } - public MemberResponseDTO.GetAllByMusicTitleDTO getAllByMusicTitle(Member member, Music music) { + public MemberResponseDTO.GetAllByMusicTitleDTO getAllByMusicTitle( + Member member, List musics) { + List harmonyDTOs = new ArrayList<>(); + List trackDTOs = new ArrayList<>(); - List harmonies = harmonyRepository.findByMusicAndMember(member, music); - List tracks = trackRepository.findByMusicAndMember(member, music); - - List harmonyDTOs = - harmonies.stream() - .map(harmony -> memberConverter.toGetMyHarmonyDTO(harmony, member)) - .collect(Collectors.toList()); - - List trackDTOs = - tracks.stream() - .map(track -> memberConverter.toGetMyTrackDTO(track, member)) - .collect(Collectors.toList()); + for (Music music : musics) { + harmonyDTOs.addAll(getHarmonyByMusicTitle(member, music)); + trackDTOs.addAll(getTrackByMusicTitle(member, music)); + } - // DTO를 하나의 객체로 묶어서 반환 return new MemberResponseDTO.GetAllByMusicTitleDTO(harmonyDTOs, trackDTOs); }