Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 36 additions & 27 deletions src/main/java/umc/codeplay/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -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.*;
Expand Down Expand Up @@ -90,17 +92,23 @@ public ApiResponse<MemberResponseDTO.GetAllByMusicTitleDTO> getByMusicTitle(

// 현재 로그인한 사용자 검색
String email = userDetails.getUsername();
Member member =
memberRepository
.findByEmail(email)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));

Optional<Member> optionalMember = memberRepository.findByEmail(email);
if (optionalMember.isEmpty()) {
throw new RuntimeException("사용자를 찾을 수 없습니다.");
}
Member member = optionalMember.get();
List<Music> musics = musicRepository.findAllByTitle(musicTitle);

List<MemberResponseDTO.GetMyHarmonyDTO> harmonyDTOs = new ArrayList<>();
List<MemberResponseDTO.GetMyTrackDTO> 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);
}
Expand All @@ -110,19 +118,21 @@ public ApiResponse<MemberResponseDTO.GetAllByMusicTitleDTO> getByMusicTitle(
public ApiResponse<List<MemberResponseDTO.GetMyHarmonyDTO>> getHarmonyByMusicTitle(
@AuthenticationPrincipal CustomUserDetails userDetails,
@RequestParam String musicTitle) {
// 현재 로그인한 사용자 검색
String email = userDetails.getUsername();
Member member =
memberRepository
.findByEmail(email)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));

Optional<Member> optionalMember = memberRepository.findByEmail(email);
if (optionalMember.isEmpty()) {
throw new RuntimeException("사용자를 찾을 수 없습니다.");
}
Member member = optionalMember.get();

Music music = musicRepository.findByTitle(musicTitle);

List<Music> musics = musicRepository.findAllByTitle(musicTitle);
List<MemberResponseDTO.GetMyHarmonyDTO> results =
memberService.getHarmonyByMusicTitle(member, music);
musics.stream()
.flatMap(
music ->
memberService
.getHarmonyByMusicTitle(member, music)
.stream())
.collect(Collectors.toList());

return ApiResponse.onSuccess(results);
}
Expand All @@ -132,19 +142,18 @@ public ApiResponse<List<MemberResponseDTO.GetMyHarmonyDTO>> getHarmonyByMusicTit
public ApiResponse<List<MemberResponseDTO.GetMyTrackDTO>> getTrackByMusicTitle(
@AuthenticationPrincipal CustomUserDetails userDetails,
@RequestParam String musicTitle) {
// 현재 로그인한 사용자 검색
String email = userDetails.getUsername();
Member member =
memberRepository
.findByEmail(email)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));

Optional<Member> optionalMember = memberRepository.findByEmail(email);
if (optionalMember.isEmpty()) {
throw new RuntimeException("사용자를 찾을 수 없습니다.");
}
Member member = optionalMember.get();

Music music = musicRepository.findByTitle(musicTitle);

List<Music> musics = musicRepository.findAllByTitle(musicTitle);
List<MemberResponseDTO.GetMyTrackDTO> results =
memberService.getTrackByMusicTitle(member, music);
musics.stream()
.flatMap(
music -> memberService.getTrackByMusicTitle(member, music).stream())
.collect(Collectors.toList());

return ApiResponse.onSuccess(results);
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/umc/codeplay/repository/MusicRepository.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package umc.codeplay.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import umc.codeplay.domain.Music;

public interface MusicRepository extends JpaRepository<Music, Long> {
// 제목으로 음원 찾기
Music findByTitle(String title);

List<Music> findAllByTitle(String title);
}
23 changes: 9 additions & 14 deletions src/main/java/umc/codeplay/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -133,22 +134,16 @@ public List<MemberResponseDTO.GetMyTrackDTO> getMyTrack(Member member) {
.collect(Collectors.toList());
}

public MemberResponseDTO.GetAllByMusicTitleDTO getAllByMusicTitle(Member member, Music music) {
public MemberResponseDTO.GetAllByMusicTitleDTO getAllByMusicTitle(
Member member, List<Music> musics) {
List<MemberResponseDTO.GetMyHarmonyDTO> harmonyDTOs = new ArrayList<>();
List<MemberResponseDTO.GetMyTrackDTO> trackDTOs = new ArrayList<>();

List<Harmony> harmonies = harmonyRepository.findByMusicAndMember(member, music);
List<Track> tracks = trackRepository.findByMusicAndMember(member, music);

List<MemberResponseDTO.GetMyHarmonyDTO> harmonyDTOs =
harmonies.stream()
.map(harmony -> memberConverter.toGetMyHarmonyDTO(harmony, member))
.collect(Collectors.toList());

List<MemberResponseDTO.GetMyTrackDTO> 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);
}

Expand Down