11package umc .codeplay .controller ;
22
3+ import java .util .List ;
4+ import java .util .Optional ;
5+
36import org .springframework .security .core .annotation .AuthenticationPrincipal ;
47import org .springframework .web .bind .annotation .*;
58
69import lombok .RequiredArgsConstructor ;
710
11+ import io .swagger .v3 .oas .annotations .Operation ;
812import umc .codeplay .apiPayLoad .ApiResponse ;
913import umc .codeplay .config .security .CustomUserDetails ;
1014import umc .codeplay .converter .MemberConverter ;
1115import umc .codeplay .domain .Member ;
16+ import umc .codeplay .domain .Music ;
1217import umc .codeplay .dto .MemberRequestDTO ;
1318import umc .codeplay .dto .MemberResponseDTO ;
19+ import umc .codeplay .repository .MemberRepository ;
20+ import umc .codeplay .repository .MusicRepository ;
1421import umc .codeplay .service .MemberService ;
1522
1623@ RestController
@@ -20,18 +27,125 @@ public class MemberController {
2027
2128 private final MemberService memberService ;
2229 private final MemberConverter memberConverter ;
30+ private final MemberRepository memberRepository ;
31+ private final MusicRepository musicRepository ;
2332
33+ @ Operation (summary = "유저 정보 업데이트(비밀번호 변경)" , description = "기존 비밀번호, 새로운 비밀번호 입력" )
2434 @ PutMapping ("/update" )
2535 public ApiResponse <MemberResponseDTO .UpdateResultDTO > updateMember (
2636 @ AuthenticationPrincipal
2737 CustomUserDetails
2838 userDetails , // 현재 로그인된 사용자 정보, email로 조회하기 위해 customUserDetails 사용
2939 @ RequestBody MemberRequestDTO .UpdateMemberDTO requestDto ) {
3040
41+ // userDetails.getUsername() -> 로그인된 사용자의 email
3142 Member updatedMember = memberService .updateMember (userDetails .getUsername (), requestDto );
3243 MemberResponseDTO .UpdateResultDTO responseDto =
3344 memberConverter .toUpdateResultDTO (updatedMember );
3445
3546 return ApiResponse .onSuccess (responseDto );
3647 }
48+
49+ @ Operation (summary = "마이페이지 화성분석 탭 결과" , description = "로그인한 상태에서 마이페이지" )
50+ @ GetMapping ("/mypage/harmony" )
51+ public ApiResponse <List <MemberResponseDTO .GetMyHarmonyDTO >> getMyHarmony (
52+ @ AuthenticationPrincipal CustomUserDetails userDetails ) {
53+
54+ String email = userDetails .getUsername ();
55+
56+ Optional <Member > optionalMember = memberRepository .findByEmail (email );
57+ if (optionalMember .isEmpty ()) {
58+ throw new RuntimeException ("사용자를 찾을 수 없습니다." );
59+ }
60+ Member member = optionalMember .get ();
61+
62+ List <MemberResponseDTO .GetMyHarmonyDTO > results = memberService .getMyHarmony (member );
63+
64+ return ApiResponse .onSuccess (results );
65+ }
66+
67+ @ Operation (summary = "마이페이지 세션분리 탭 결과" , description = "로그인한 상태에서 마이페이지" )
68+ @ GetMapping ("/mypage/track" )
69+ public ApiResponse <List <MemberResponseDTO .GetMyTrackDTO >> getMyTracks (
70+ @ AuthenticationPrincipal CustomUserDetails userDetails ) {
71+
72+ String email = userDetails .getUsername ();
73+
74+ Optional <Member > optionalMember = memberRepository .findByEmail (email );
75+ if (optionalMember .isEmpty ()) {
76+ throw new RuntimeException ("사용자를 찾을 수 없습니다." );
77+ }
78+ Member member = optionalMember .get ();
79+
80+ List <MemberResponseDTO .GetMyTrackDTO > results = memberService .getMyTrack (member );
81+
82+ return ApiResponse .onSuccess (results );
83+ }
84+
85+ @ Operation (summary = "마이페이지 전체 검색" , description = "파라미터 musicTitle에 음원 제목으로 검색" )
86+ @ GetMapping ("/mypage/search" )
87+ public ApiResponse <MemberResponseDTO .GetAllByMusicTitleDTO > getByMusicTitle (
88+ @ AuthenticationPrincipal CustomUserDetails userDetails ,
89+ @ RequestParam String musicTitle ) {
90+
91+ // 현재 로그인한 사용자 검색
92+ String email = userDetails .getUsername ();
93+
94+ Optional <Member > optionalMember = memberRepository .findByEmail (email );
95+ if (optionalMember .isEmpty ()) {
96+ throw new RuntimeException ("사용자를 찾을 수 없습니다." );
97+ }
98+ Member member = optionalMember .get ();
99+
100+ Music music = musicRepository .findByTitle (musicTitle );
101+
102+ MemberResponseDTO .GetAllByMusicTitleDTO results =
103+ memberService .getAllByMusicTitle (member , music );
104+
105+ return ApiResponse .onSuccess (results );
106+ }
107+
108+ @ Operation (summary = "마이페이지 화성분석 검색" , description = "파라미터 musicTitle에 음원 제목으로 검색" )
109+ @ GetMapping ("/mypage/harmony/search" )
110+ public ApiResponse <List <MemberResponseDTO .GetMyHarmonyDTO >> getHarmonyByMusicTitle (
111+ @ AuthenticationPrincipal CustomUserDetails userDetails ,
112+ @ RequestParam String musicTitle ) {
113+ // 현재 로그인한 사용자 검색
114+ String email = userDetails .getUsername ();
115+
116+ Optional <Member > optionalMember = memberRepository .findByEmail (email );
117+ if (optionalMember .isEmpty ()) {
118+ throw new RuntimeException ("사용자를 찾을 수 없습니다." );
119+ }
120+ Member member = optionalMember .get ();
121+
122+ Music music = musicRepository .findByTitle (musicTitle );
123+
124+ List <MemberResponseDTO .GetMyHarmonyDTO > results =
125+ memberService .getHarmonyByMusicTitle (member , music );
126+
127+ return ApiResponse .onSuccess (results );
128+ }
129+
130+ @ Operation (summary = "마이페이지 세션분리 검색" , description = "파라미터 musicTitle에 음원 제목으로 검색" )
131+ @ GetMapping ("/mypage/track/search" )
132+ public ApiResponse <List <MemberResponseDTO .GetMyTrackDTO >> getTrackByMusicTitle (
133+ @ AuthenticationPrincipal CustomUserDetails userDetails ,
134+ @ RequestParam String musicTitle ) {
135+ // 현재 로그인한 사용자 검색
136+ String email = userDetails .getUsername ();
137+
138+ Optional <Member > optionalMember = memberRepository .findByEmail (email );
139+ if (optionalMember .isEmpty ()) {
140+ throw new RuntimeException ("사용자를 찾을 수 없습니다." );
141+ }
142+ Member member = optionalMember .get ();
143+
144+ Music music = musicRepository .findByTitle (musicTitle );
145+
146+ List <MemberResponseDTO .GetMyTrackDTO > results =
147+ memberService .getTrackByMusicTitle (member , music );
148+
149+ return ApiResponse .onSuccess (results );
150+ }
37151}
0 commit comments